【发布时间】:2012-06-01 15:23:23
【问题描述】:
我有一个类定义如下:
Class A
{
public:
int num;
A *parent;
vector<A *> children;
...
// constructor without parameters
A(void)
{
this->num = 3;
this->parent = 0;
for (int i=0;i<num;++i)
children.push_back(new A(this,num-1));
}
// constructor with parameters
A(A *a,int n)
{
this->num = n;
this->children->parent = a;
for (int i=0;i<num;++i)
this->children.push_back(new A(this,this->num-1));
}
};
现在,构造函数工作正常。析构函数有一些问题。 目前,析构函数定义为:
A::~A(void)
{
if (this->parent!=0) this->parent = 0;
for (int i=0;i<(int)children.size();++i)
this->children[i]->~A();
vector <A *> ().swap(this->children);
}
但每次调试时,它都会在以下位置中断:
void deallocate(pointer _Ptr, size_type)
{ // deallocate object at _Ptr, ignore size
::operator delete(_Ptr);
}
看起来我无法删除 this->children 向量中的指针,有什么方法可以成功解构类吗?
【问题讨论】:
-
旁白:为什么要将
children.size()转换为int,而您可以将循环变量声明为size_t? -
如果您使用
vector<shared_ptr<A> >,您将不需要任何代码并且您的程序将更加健壮。这是一个选择吗? -
它叫做destructor,而不是deconstructor
-
我很确定这条线不会编译:
this->children->parent = a; -
@larsmans:根据您使用的 STL 实现,
vector::size_type可能没有使用默认分配器的size_type,但可能直接使用size_t,或完全使用其他东西。
标签: c++ memory-management vector