我想複製一個對象到另一個對象。但我的第一個對象有一個屬性指向同一個對象內的另一個變量。例如:複製其中的指針對象到另一個對象
int* a;
我想要做的是使該對象的副本,但通過我的調試器,我可以清楚地看到,
int* a;
完全一樣地址作爲我複製的對象的int* a;
,當我不希望它這樣做時。
我希望它指向自己在內存中的位置,而不是改變原始對象。
我想複製一個對象到另一個對象。但我的第一個對象有一個屬性指向同一個對象內的另一個變量。例如:複製其中的指針對象到另一個對象
int* a;
我想要做的是使該對象的副本,但通過我的調試器,我可以清楚地看到,
int* a;
完全一樣地址作爲我複製的對象的int* a;
,當我不希望它這樣做時。
我希望它指向自己在內存中的位置,而不是改變原始對象。
您應該爲此創建一個拷貝構造函數。 基本複印操作將複製到曲面中。 (成員明智的副本)
YourClass::YourClass(const YourClass& p) {
x = p.x;
y = p.y;
*a = *(p.a);
}
你應該在構造函數的指針分配空間。
在這種情況下,您需要編寫一個賦值操作符和一個拷貝構造函數。我會告訴你一個更完整的文章,其中描述了兩者。如有必要,您還可以在網上搜索更多示例。 http://www.cplusplus.com/articles/y8hv0pDG/
如果你有一個C++ 11兼容的編譯器,那麼我也會考慮使用智能指針,如果我是你。
你必須爲此編寫代碼。複製指針不會改變它。 –
使用複製構造函數,但請確保遵循[三規則](https://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29) – clcto
您可能想要檢查深層複製。 –