我有一個班級,他的constructor
將一個對象的地址作爲參數。檢查內存是否在堆上?
MyClass(OtherClass * otherClass);
在這個類的Destructor
我嘗試delete
的OtherClass
實例。
~MyClass() {
if(otherClass != nullptr) {
delete otherClass;
}
}
時遇到的問題是,當我把這種constructor
我稱之爲從stack
而不是從heap
的元素,從而如下面我叫它:
MyClass的MyClass的(& otherObject );
因此,當myClass
對象超出範圍時,我得到一個異常。如果我的OtherObject
變量是在stack
或heap
上聲明的,我該如何推測?換句話說,我怎麼知道我是否可以delete
這個對象?
如果你沒有任何物體所有權規則,代碼將出現混亂,你將有這樣的問題。通常傳遞一個指針是「給所有權」該對象。如果你不想這樣做,你需要將其改爲參考。 – tadman
你應該把它作爲你的類合同的一個明確部分,不管它是否「獲得了所有權」的提供的參數,然後讓代碼創建負責指定它的對象 –
考慮使用'shared_ptr',儘管這意味着你永遠不會有一個「堆棧對象」給它。在安全性方面,這是一件好事 –