在java中,如果你做作业通过参考?
Myobj one = new Myobj();
Myobj two = one;
那么一,两个都指向同一个对象。
在C++中,如果我做:
Myobj one = new Myobj();
Myobj *two = &one;
这是本质上是相同的java的例子吗?其中修改one
或two
会影响两个对象吗?
在java中,如果你做作业通过参考?
Myobj one = new Myobj();
Myobj two = one;
那么一,两个都指向同一个对象。
在C++中,如果我做:
Myobj one = new Myobj();
Myobj *two = &one;
这是本质上是相同的java的例子吗?其中修改one
或two
会影响两个对象吗?
这些使得一个和两个基本上相同的事情:
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;
论文下面的代码是一样的Java。
Myobj one;
Myobj& two = one;
它们是不一样的!
使用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的生命周期在本地范围之后结束。
当您在cpp中声明像Object obj时,实际上是为一个对象分配空间,而不是像Java
那样创建一个引用。在CPP
中,指针最接近你在java中调用引用的地方。
Object *obj=new Object();
上面的语句在堆栈以外的内存中创建对象。它有一段时间,直到您使用delete
运算符释放内存或直到应用程序关闭。
在Java
中,所有对象都只在堆中创建。
不,这不能编译:'two'应该声明'MyObj中*',然后就去做一个' =两个;'。您也可以在C++中使用引用。 – quantdev 2014-10-12 06:30:45
@quantdev嗯,我实际上不需要'one = two',但是当我初始化'two'时,我希望它是'one'的副本。然后我可以稍后编辑'two'。我做得对吗? – penu 2014-10-12 06:32:20
@ user1008134其中一个当前是指向无的指针 – Winestone 2014-10-12 06:33:11