我对如何正确分配/解除分配动态对象数组感到困惑。这是我的情景:
class Tuple {
public:
Tuple(int columns);
~Tuple();
void set(int i, string d);
string get(int i);
int columnCount();
private:
string *data;
int columns;
};
Tuple::Tuple(int columns) {
this->columns = columns > 0 ? columns : 0;
if (this->columns > 0) {
data = new string[this->columns];
} else {
data = 0;
}
}
Tuple::~Tuple() {
if (columns > 0) {
delete data;
}
}
现在,当我调用以下代码时,我得到一个段错误:
Tuple *t = new Tuple(4);
//some code
delete t;
我的denstructor有什么问题?
答案 0 :(得分:4)
您需要在析构函数中使用数组删除运算符:
delete [] data;
析构函数可以写成
Tuple::~Tuple() {
delete [] data;
}
答案 1 :(得分:2)
我建议您查看以下内容之间的区别:
删除
删除(nothrow_t)
删除[]
删除[](nothrow_t)
并研究他们的新等价物, 当一个人应该被用在另一个人身上时。
答案 2 :(得分:2)
我的denstructor有什么问题?
你写了delete
而不是delete[]
。
顺便说一句,你也错过了一个复制构造函数和赋值运算符,因此你的类更精巧地被破解并且容易受到内存泄漏的影响。
如何正确分配/解除分配动态对象数组。
别。
使用std::vector<std::string>
。