2

我有一堂课:A我写了析构函数。

现在我有一堂课B

class B {
    A* a;
  public:
    B() {
      a = new A[10];
    }

    ~B() {

    }

};

我想实现B的析构函数。

我认为是这样的:

~B() {
  delete[] a;
}

但我有一个错误。

也许我必须做下一行?

delete a;

任何帮助表示赞赏!

4

1 回答 1

4

你没有说你得到了什么错误,但以下编译没有错误:

class A {};

class B {
    A* a;
  public:
    B() {
      a = new A[10];
    }

    ~B() {
      delete[] a;
    }
};

请注意,这是不完整的,因为它违反了三法则B::a应该是合适的智能指针,或者类需要实现复制构造函数和复制赋值运算符(或禁用两者)。一个更好的选择是使用std::vectororstd::array代替原始指针。

于 2013-04-04T12:16:19.290 回答