假設我們有一個存放了一個指針成員對另一個對象的類。如果我在析構函數中刪除那個指針,我會得到一個錯誤(我理解爲什麼)。析構類,用於保存指向對象
我的問題是:有沒有可能克服,沒有內存泄漏?
這是我正在做的一個演示。的所有
class A {
public:
~A() { cout<< "~A()" <<endl; }
};
class B {
A *pA;
public:
B(A* pA) {
this->pA = pA;
}
~B() {
delete pA;
cout<<"~B()"<<endl;
}
};
int main() {
A a;
{
B b2(new A()); //deletes A, deletes B, no memory leaks
}
{
B b(&a); //deletes A, error.
}
return 0;
}
將智能指針知道該地址是從'new'或堆棧?我不這麼認爲。這種問題沒有萬無一失的方法。 OP也不會談論共享內存的多個對象。它一次只有一個,請查看「{}」範圍。 – iammilind 2013-03-20 07:17:51
+1是你的最後一點有點自相矛盾。 「共享所有權」後面緊跟着「沒有人擁有對象」。 – dreamlax 2013-03-20 07:17:53
@dreamlax如果每個人都擁有一些東西,那麼沒有人擁有它:-)但是我會試着重新修飾它以使其更清晰。 – juanchopanza 2013-03-20 07:19:40