c ++分配和释放动态的对象数组

时间:2013-12-09 20:24:40

标签: c++

我对如何正确分配/解除分配动态对象数组感到困惑。这是我的情景:

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有什么问题?

3 个答案:

答案 0 :(得分:4)

您需要在析构函数中使用数组删除运算符:

delete [] data;

析构函数可以写成

Tuple::~Tuple() {

    delete [] data; 
}

答案 1 :(得分:2)

我建议您查看以下内容之间的区别:

删除
删除(nothrow_t)
删除[]
删除[](nothrow_t)

并研究他们的新等价物, 当一个人应该被用在另一个人身上时。

答案 2 :(得分:2)

  

我的denstructor有什么问题?

你写了delete而不是delete[]

顺便说一句,你也错过了一个复制构造函数和赋值运算符,因此你的类更精巧地被破解并且容易受到内存泄漏的影响。

  

如何正确分配/解除分配动态对象数组。

别。

使用std::vector<std::string>

相关问题