所以我有一個基類,它有一個私有成員和派生類,它也有一些成員,基類定義了一個operator =,這是我的問題:在派生類和切片中使用operator =的正確方法
這是做到這一點的正確方法還是有更好的方法? 我一直在做任何切片嗎?
class A
{
private:
int* Arr;
public:
A(){
Arr=new int[10];
for(int i=0;i<10;i++){
Arr[i]=2*i;
}
}
const A& operator=(const A& a){
delete []Arr;
Arr=new int[10];
for(int i=0;i<10;i++){
Arr[i]=a.Arr[i];
}
return *this;
}
};
class B: public A
{
private:
int * Arr2;
public:
B(){
Arr2=new int[10];
for(int i=0;i<10;i++){
Arr2[i]=3*i;
}
}
const B& operator=(const B& b){
A::operator=(b);
delete []Arr2;
Arr2=new int[10];
for(int i=0;i<10;i++){
Arr2[i]=b.Arr2[i];
}
return *this;
}
};
我知道這不是一個完美的代碼,但我只是寫了一個簡單的問題。
這不是異常安全或自分配安全的(這是有趣的閱讀:http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom)..除此之外,它看起來大致確定。 –
是的,我知道,我沒有異常安全的自我分配安全預防方法。關於其他問題呢?代碼中是否有切片(甚至是安全的)? – petric
你希望這條線能做什麼:A :: operator =(b); – doctorlove