如果我不使用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)
要迂腐,这取决于什么MyType.如果你有typedef char* MyType和你分配内存MyType,并且你希望该对象拥有该内存,那么是的,你需要一个析构函数.
否则,你不需要来释放内存为不与任何分配new或malloc,所以没有.
你的班级根本不应该有一个析构函数.人们普遍认为,在实际需要时,你应该只有一个析构函数.有一个析构函数也意味着实现赋值运算符和复制构造函数(三个规则).如果您没有管理任何内存,最好依赖编译器提供的内存 - 即如果您不这样做,编译器将生成这三个内存.
此外,您的构造函数应如下所示:
A::A() : x(42), v(5){
}
Run Code Online (Sandbox Code Playgroud)
否则,您的成员将被初始化然后被分配到,这是浪费.
| 归档时间: |
|
| 查看次数: |
1157 次 |
| 最近记录: |