Ява — назначения по ссылке?

В Java, если вы делаете

Myobj one = new Myobj();
Myobj two = one;

Тогда один и два указывают на один и тот же объект.

В C ++, если я сделал:

Myobj one = new Myobj();
Myobj *two = &one;

Это по сути то же самое, что и пример Java? При этом изменение либо one или же two повлияет на оба объекта?

0

Решение

Они делают одно и два в основном одно и то же:

Myobj *one = new Myobj();
Myobj *two = one;
//one and two are the same thing, pointer's to a Myobj

Myobj one;
Myobj *two = &one;
//one is an object that will be deallocated at end of current scope
//two is a pointer to one

В C ++ new Myobj() создает Myobj в куче и возвращает указатель на него.

Myobj *one; //Creates a variable that should point to a Myobj instance
Myobj two = new Myobj(); //Doesn't really work
*two = &one; //Get where two point's at and assign the location of one to it

Обновить:

Myobj one = new Myobj(); //This doesn't quite work, assigning pointer to class
Myobj *two = &one; //This works, you make a pointer to point to one

Чтобы исправить ваше первое утверждение, вы можете использовать:

Myobj one = Myobj();
//Myobj one(); //This requires the constructor to take arguments, thanks juanchopanza!
Myobj one{}; //Requires C++11, courtesy juanchopanza
Myobj one;

Все делают одно и то же

Как правило, следующее должно сделать копию:

Myobj one; //or any variant
Myobj two = one;

Или, если вы предпочитаете использовать указатели:

Myobj *one = new Myobj();
Myobj *two = new Myobj();
*two = *one;
1

Другие решения

код тезисов ниже такой же, как Java.

Myobj one;
Myobj& two = one;
2

Приведенный ниже код указывает одну и две точки на одно и то же местоположение, т. Е. Изменение любого из них приведет к их изменению

yobj *one = new Myobj();
Myobj *two = one;

Если вы хотите, чтобы два были его копией,

Myobj *one = new Myobj();
Myobj *two = new Myobj();
*two = *one;
2

Они не одинаковы!

Объекты, созданные с new Ключевое слово сохраняется даже после локальной области видимости. Им выделяется хранилище в куче. И они возвращают ссылку, поэтому вам нужен указатель для хранения значения ссылки.

Объекты созданы

without new Ключевое слово следует за семантикой копирования. Это если у вас есть

Object obj1=Object()
Object obj2=obj1;

два объекта будут созданы. То есть значения свойств obj1 копируются в obj2.

Если вы не хотите создавать новый объект, вы должны использовать указатели.

Пример:

Object obj1=Object()
Object *obj1ref=&obj1;  //this is like assigning reference in java

Ниже инструкция иллюстрирует переменную в заметке cpp & в объявлении он не может быть сопоставлен с каким-либо другим объектом после назначения. Так что это not слишком близко к Java Рекомендации.

Object& ref2=obj1;

Здесь obj1 имеет время жизни, которое заканчивается после локальной области видимости.

Когда вы объявляете как объект obj в cpp, вы фактически выделяете пространство для одного объекта, а не просто создаете ссылку, как в Java, В CPP, указатели ближе всего к тому, что вы называете ссылками в Java.

 Object *obj=new Object();

Выше оператор создает объект в памяти, кроме стека. У него есть время жизни, пока вы не освободите память, используя delete оператор или пока приложение не закрыто.

В JavaВсе объекты создаются только в куче.

2
По вопросам рекламы ammmcru@yandex.ru