我有一个类:A
,我写了析构函数。执行析构函数
现在我有一个类B
:
class B {
A* a;
public:
B() {
a = new A[10];
}
~B() {
}
};
我想要实现B.
的析构函数,我认为是这样的:
~B() {
delete[] a;
}
,但我得到了一个错误。
也许我必须做下一行?
delete a;
任何帮助赞赏!
我有一个类:A
,我写了析构函数。执行析构函数
现在我有一个类B
:
class B {
A* a;
public:
B() {
a = new A[10];
}
~B() {
}
};
我想要实现B.
的析构函数,我认为是这样的:
~B() {
delete[] a;
}
,但我得到了一个错误。
也许我必须做下一行?
delete a;
任何帮助赞赏!
你不说你得到了什么错误,但是下面的编译没有错误:
class A {};
class B {
A* a;
public:
B() {
a = new A[10];
}
~B() {
delete[] a;
}
};
注意,这是因为它违反了Rule of Three不完整的。 B::a
应该是一个合适的智能指针,或者该类需要实现复制构造函数和复制赋值运算符(或disable both)。更好的选择是使用std::vector
或std::array
而不是原始指针。
什么是错误? – sepp2k 2013-04-04 12:15:45
'delete [] a;'是正确的。你得到的错误是什么? – jrok 2013-04-04 12:15:46
可能你省略了一些相关的代码? – moooeeeep 2013-04-04 12:16:26