我最近發現,當我有一個類內的指針,我需要指定一個複製構造函數。複製構造函數與指針
爲了解這一點,我做了以下簡單的代碼。它編譯,但執行復制構造函數時給我運行時錯誤。
我想複製只是複製對象的指針的值,但避免分配相同的地址。
那麼,這裏有什麼問題?
class TRY{
public:
TRY();
~TRY();
TRY(TRY const &);
int *pointer;
void setPointer(int);
};
void TRY::setPointer(int a){
*pointer = a;
return;
}
TRY::TRY(){}
TRY::~TRY(){}
TRY::TRY(TRY const & copyTRY){
int a = *copyTRY.pointer;
*pointer = a;
}
int main(){
TRY a;
a.setPointer(5);
TRY b = a;
b.setPointer(8);
cout << "Address of object a = " << &a << endl;
cout << "Address of object b = " << &b << endl;
cout << "Address of a.pointer = " << a.pointer << endl;
cout << "Address of b.pointer = " << b.pointer << endl;
cout << "Value in a.pointer = " << *a.pointer << endl;
cout << "Value in b.pointer = " << *b.pointer << endl;
return 0;
}
我將這個概念用於其中有很多指針的類,其中我需要將所有值從一個對象複製到另一個。這個代碼最初需要複製,所以我想保留複製的可能性(我不會將複製構造函數隱藏爲私有)。
此外,我需要實現的真正的類有10個指針,它可能隨時間而改變。是不是有一個有些更聰明的辦法在C++?深拷貝構造函數...
不要忘記在爲它分配新對象之前先刪除m_p。 – xtofl 2009-04-23 14:18:39
我沒有定義賦值操作符,它只是一個拷貝構造函數。因此不需要刪除m_p。 – Naveen 2009-04-23 14:21:32