質問:
関数でフェッチされた(作成されていない、フェッチされたばかりの)ポインターを削除する必要がありますか?例:
#include <SomeObject>
#define SAFE_DELETE(p) { if (p) { delete (p); (p) = NULL; } }
class DraftObject
{
public:
DraftObject() : _x(0) {}
~DraftObject(){}
int CalculateSomething()
{
AnotherObject* aObj = SomeObject::getInstance()->getAObjPointer();
/* Do some calculations and etc... */
_x += aObj->GetSomeIntValue();
SAFE_DELETE(aObj) // <-- Would you recomend this here?
return _x;
}
protected:
int _x;
};
aObjは、SomeObjectインスタンスでも他の場合に再利用されます。SomeObject::getInstance()->getAObjPointer()
私は続けて、必要なものすべてを常に求めることができましたが、私の個人的な意見SomeObject::getInstance()->getAObjPointer()->GetSomeIntValue()
ほど読みやすくはありません。aObj->GetSomeIntValue()
Boostの何か(shared_ptr、weak_ptr、さらにはauto_ptr)を使用しても心配する必要はないことはわかっていますが、これがどのように機能するかについてはもっと興味があります。ポインタを削除しないとメモリリークが発生しますか、それともポインタを削除するとメモリから削除され、他のスコープ(インスタンスオブジェクトおよび使用される可能性のある他の場所)に移動しますか?
何かご意見は?
乾杯。