2013-04-04 64 views
2

我有一个类:A,我写了析构函数。执行析构函数

现在我有一个类B

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

    ~B() { 

    } 

}; 

我想要实现B.

的析构函数,我认为是这样的:

~B() { 
    delete[] a; 
} 

,但我得到了一个错误。

也许我必须做下一行?

delete a; 

任何帮助赞赏!

+2

什么是错误? – sepp2k 2013-04-04 12:15:45

+1

'delete [] a;'是正确的。你得到的错误是什么? – jrok 2013-04-04 12:15:46

+0

可能你省略了一些相关的代码? – moooeeeep 2013-04-04 12:16:26

回答

4

你不说你得到了什么错误,但是下面的编译没有错误:

class A {}; 

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

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

注意,这是因为它违反了Rule of Three不完整的。 B::a应该是一个合适的智能指针,或者该类需要实现复制构造函数和复制赋值运算符(或disable both)。更好的选择是使用std::vectorstd::array而不是原始指针。

+0

+1,特别是指出三法则。 – Angew 2013-04-04 12:36:33

+0

...或者它应该是标准库中相应的容器类。 – moooeeeep 2013-04-04 14:40:08

+0

@moooeeeep:好的,谢谢。我已经更新了包含这个的答案。 – NPE 2013-04-04 14:43:32