그래서 나는이 같은 클래스가 있다고 가정 :C++ 포인터 데이터 멤버 : 누가 삭제해야합니까?
사람이 같은 생성자를 사용하는 경우class A {
public:
A(SomeHugeClass* huge_object)
: m_huge_object(huge_object) {}
private:
SomeHugeClass* m_huge_object;
};
:
A* foo = new A(new SomeHugeClass());
누구의 책임은 생성자에서 newed 개체에 삭제를 호출하는 것입니다? 이 경우 SomeHugeClass가 익명이므로 A 생성자가 호출 된 범위는 foo 만 삭제할 수 있습니다.
그러나 누군가 이러한 생성자를 사용한다면 어떻게 될까요?
SomeHugeClass* hugeObj = new SomeHugeClass();
A* foo = new A(hugeObj);
그런 다음 호출자는 거시 오 삭제를 특정 시점에서 호출 할 수 있습니까?
파괴시 누수 메모리가 구현됩니까?
저는 많은 방법으로이 작업을 수행하는 프로젝트에서 작업하고 있습니다. 스마트 포인터를 사용하기를 좋아하기 때문에 이전 코드를 사용하여 이전 코드를 활용하는 방법에 대해 이야기해야합니다. 저 할 수 있어요.
마지막 코드 스 니펫에서'hugeObj'를 초기화해야합니다. 그렇지 않으면'foo'를 사용할 때 언젠가는 정의되지 않은 동작을 할 수 있습니다. – Gorpik
^잘 잡습니다. 편집 중. – RyanG
아무도 귀하의 경우 포인터 멤버를 삭제해야하는 사람을 말할 수 없습니다. 우리는 신뢰할 수있는 대답을하기위한 상황이 부족합니다. 나는 그것이 당신의 수업이 무엇이고 그것이 무엇을 대표하는지에 달려 있다고 생각합니다. 그것은 어떤 외부 데이터를 참조하는 클래스 일 수 있으며 그의 문서는 수명이 참조 된 데이터의 수명을 초과해서는 안된다는 것을 지정합니다. 아니면 소유권을 가질 수 있습니다. – ereOn