在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