我是否需要清理非指针数据成员?

And*_*eas 3 c++ destructor

如果我不使用new分配类的数据成员,是否还需要在析构函数中进行清理?例如,在下面的例子中,我需要delete向量吗?还是依赖于MyType

class A {
  A();
  ~A();
  MyType x;
  std::vector<MyType> v;
};
A::A() {
  x = MyType(42);
  v = std::vector<MyType>(5);
}
A::~A() {
  // what goes here?
}
Run Code Online (Sandbox Code Playgroud)

Luc*_*ore 9

要迂腐,这取决于什么MyType.如果你有typedef char* MyType和你分配内存MyType,并且你希望该对象拥有该内存,那么是的,你需要一个析构函数.

否则,你不需要来释放内存为不与任何分配newmalloc,所以没有.

你的班级根本不应该有一个析构函数.人们普遍认为,在实际需要时,你应该只有一个析构函数.有一个析构函数也意味着实现赋值运算符和复制构造函数(三个规则).如果您没有管理任何内存,最好依赖编译器提供的内存 - 即如果您不这样做,编译器将生成这三个内存.

此外,您的构造函数应如下所示:

A::A() : x(42), v(5){
}
Run Code Online (Sandbox Code Playgroud)

否则,您的成员将被初始化然后被分配到,这是浪费.