你好,在一个 C++ 类 X 中,我有一个
class X{
private:
std::map<some_struct, int> C;
}
如果有一个定义如下的结构体 some_struct:
typedef struct{
int a;
int b;
int c;
}some_struct;
我的问题是:在X的析构函数中,我需要指定关于地图C的任何内容吗?如果需要,X的析构函数应该为地图C执行哪些操作?
你好,在一个 C++ 类 X 中,我有一个
class X{
private:
std::map<some_struct, int> C;
}
如果有一个定义如下的结构体 some_struct:
typedef struct{
int a;
int b;
int c;
}some_struct;
some_struct
或class X
指定析构函数,编译器会自动生成它。只要没有用new
或new[]
在动态存储中显式分配该类的内存,就不需要编写析构函数来应用delete
或delete[]
操作。typedef
语法。struct some_struct {
int a;
int b;
int c;
};
new
运算符并不是判断是否需要析构函数的好指标。我可以使用 unique_ptr<some_struct>(new some_struct)
,但仍然可以保存。 - Bryan Chennew
的另一个原因。 - Bryan Chennew
运算符在堆上动态分配了对象,那么在析构函数中需要关注C
。例如:class X{
public:
X();
private:
std::map<some_struct, int> *p_C;
}
在定义中:
X::X() {
p_C = new map<some_struct, int>();
}
X::~X() {
if(p_C) delete p_C;
}
std::map
的析构函数可以更有效地完成此操作。 - Bryan Chen