당신은 void
포인터를 삭제하지 않아야합니다. delete
은 특정 유형 (예 : 컴파일러가 알 수있는 것, 오류 메시지에 설명 된대로 소멸자를 호출해야 함)에서 작동합니다.
당신이 당신의 구조에 지정되지 않은 유형을 유지하려면
, 당신은 어떻게 든 포장해야합니다.
class DataWrapper
{
public:
virtual void * GetData() = 0;
virtual ~DataWrapper()
{
}
};
class MyDataWrapper
{
protected:
MyData * data;
public:
MyDataWrapper(MyData * newData)
{
data = newData;
}
void * GetData()
{
return data;
}
~MyDataWrapper()
{
delete data;
}
};
struct vStruct
{
MyDataWrapper * vPtr;
struct vStruct *next;
~vStruct()
{
if (vPtr != null)
delete vPtr;
}
};
vStruct sObj;
sObj.vPtr = new MyDataWrapper(new MyData());
// When sObj gets deleted, MyDataWrapper is
// deleted too (thanks to the ~vStruct) and
// in effect, the allocated data is deleted too.
주, 그것은 간단한 예제 것으로,보다 심미적으로 쓸 수 있습니다. 답변 중 하나가 문제가 해결 될 경우 승인으로
, 그것은이 사이트에 추가 방문자에게 도움이 될 것 같은 것을, 그것을 표시하는 것을 잊지 마십시오. – Spook