질문 :함수에서 로컬 포인터를 삭제해야합니까? (C++)
함수에서 가져온 포인터를 삭제해야합니까 (생성되지 않고 그냥 가져온 것입니까?)? 예 :
#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)에서 뭔가를 사용하더라도 걱정할 필요가 없다는 것을 알고 있습니다. 그러나이 방법이 더 흥미로운 방법입니다. 포인터를 삭제하지 않으면 메모리 누수 상황이 발생하거나 포인터를 삭제하면 메모리에서 삭제되므로 다른 범위 (인스턴스 객체는 물론 다른 곳에서도 사용될 수 있음)에서 사라집니다.
의견이 있으십니까?
건배.
'삭제'무엇이'새 것'. – chris
'delete 0;'은 아무 작업도하지 않는다는 것에주의하십시오. – hmjd
'getAObjPointer'가 참조를 리턴하면, 그것을 삭제하지 않아도됩니다. 호출 된 위치에 새로운 조작이 있으면이를 h 제해야합니다. 그렇지 않으면 참조가 매달려 있습니다. – Mahesh