删除矢量类成员

ont*_*cks 2 c++ destructor class vector member

我有一个带有成员的A类,它是另一个B类的对象指针的向量

class A
{
    std::vector<B*> m_member_A
Run Code Online (Sandbox Code Playgroud)

m_member_A通过使用new运算符创建B的对象来填充

B* b1 = new B;
m_member_A.push_back(b1);
Run Code Online (Sandbox Code Playgroud)

在A的析构函数中,以下是否正确释放所有内容?

A::~A()
{
    for(int i = 0; i < m_member_A.size(); ++i)
    {
        delete m_member_A[i];
    }

    m_member_A.clear();
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*our 5

这是正确的,只要你还有一个正确的复制构造函数和复制赋值运算符,每三个规则.请注意,这clear()是多余的,因为向量的析构函数将释放其内存.

你为什么乱搞指针和new?为什么不遵循Zero规则,使用vector<B>,或者vector<unique_ptr<B>>如果需要多态性指针?那么你根本不需要担心析构函数,复制构造函数或复制赋值运算符; 你将获得移动语义作为奖励.