이상한 어설 션 오류가 발생하여이 코드의 문제점을 발견 할 수 없습니다.개체를 삭제하는 동안 C++ 어설 션 오류가 발생했습니다.
어설 션 표현식은 _BLOCK_TYPE_IS_VALID (pHead-> nBlockUse)입니다.
가독성을 높이기 위해 코드를 약간 단순화했습니다.
class Creator
{
public:
virtual ~Creator()
{
for (MyObject* item : _list)
{
delete item; <-- assertion error here
item = 0;
}
_list.clear();
}
template <class T>
T& create()
{
T * item = new T();
_list.push_back(item);
return *item;
}
private:
std::list<MyObject*> _list;
};
class A : public MyObject, public Creator
{
};
class B : public MyObject, public Creator
{
};
int main()
{
A a;
a.create<A>();
} <-- call of destructor
아이디어는 객체 마녀가 다른 개체를 만들고, 그 개체에 대한 포인터를 저장할 수있는, 창조주를 상속한다는 것입니다. 프로그래머는 참조로 작업 할 수 있습니다. 그리고 "수퍼"객체가 파괴되면 모든 "하위"객체도 파괴됩니다.
template <class T>
class Creator
{
public:
virtual ~Creator()
{
for (T* item : _list)
{
delete item;
item = 0;
}
_list.clear();
}
T& create()
{
T * item = new T();
_list.push_back(item);
return *item;
}
private:
std::list<T*> _list;
};
class A : public MyObject, public Creator<A>
{
};
class B : public MyObject, public Creator<B>
{
};
int main()
{
A a;
a.create();
}
이제 생성 방법은 (이 예에서는 객체 A) 객체의 한 종류를 생성합니다 : I가 변경하는 경우
프로그램은 마법처럼 작동합니다. 하지만 Create 메서드는 MyObject를 상속하는 모든 개체를 만들 수 있어야합니다. 처음에는 코드의 평화처럼.
이 어설 션 오류에 대한 도움을 주시면 감사하겠습니다. 감사.
무엇이'MyObject'입니까? 그것의 소멸자가 가상인가? –
당신은 여기에'MyObject' 클래스를 보여주지 않았습니다. – Ankur
for 루프에서'item = 0;'을 실행할 수 있는지 확신 할 수 없지만 적어도 쓸모는 없습니다. – wimh