我想知道我的代码的哪一部分将释放不再需要的动态分配但静态的类成员。请参见以下代码:classPrinter在所有A -objects之间共享,并在创建A类的第一个实例时创建。可以肯定的是:退出程序时,classPrinter -object将自动销毁,对吗?

a.h

class A {
static B* classPrinter;
}

a.cpp
#include "a.h"
B A::classPrinter = new B();

A::A() { ...}

最佳答案



由于这是C++,答案是“否”。对于分配了new的所有内容,必须调用相应的delete。如果没有发生,则对象泄漏。但是,为什么要动态分配呢?这个

class A {
  static B classPrinter;
}

B A::classPrinter;

行为类似于您的代码,但classPrinter将在程序末尾销毁。

但是,你写的是



您问题中的代码无法执行此操作。如果要执行此操作,请执行以下操作:
class A {
  static std::shared_ptr<B> classPrinter;
}

std::shared_ptr<B> A::classPrinter;

A::A()
{
  if(!classPrinter)
    classPrinter.reset(new B());
}

智能指针将确保该对象被删除。

07-26 00:35