【发布时间】:2013-08-13 17:39:43
【问题描述】:
我有一个有两个构造函数的类:
A::A(int a) and A::A(double a).
这些构造函数初始化不同的成员变量。在第一种情况下,我初始化了一个地图,在第二种情况下,我初始化了一个指针。
第一种情况:
A::A(int a): mymap() {}
第二种情况:
A::A(double a) : mypointer(NULL) {}
我的问题是,当创建使用这两个不同构造函数的两个对象时,调用这个类的析构函数时应该考虑什么?我的意思是按如下方式编写析构函数就足够了: - 我检查 mymap 是否不为空然后删除条目 - 我检查 mypointer 是否不为空,然后删除 mypointer。
A::~A(){
if(!mymap.empty()) { delete entries and clear the map}
if(mypointer != NULL) { delete mypointer; mypointer =NULL; }
}
然后,如果我在两个构造函数中初始化两个变量,例如:
A::A(int a): mymap(), mypointer(NULL) {} A::A(double a) : mymap(), mypointer(NULL) {}
我的析构函数安全吗?还是我应该删除 if 条件并直接执行删除。
【问题讨论】:
-
两个构造函数都应该初始化所有数据成员。那么就没有问题了。而且您不必在删除指针之前检查
NULL。 -
这听起来像是一个设计问题:这个类有两个不同的契约,一个用
int初始化,一个用double初始化。 -
根据
mymap的内容,您可能无需执行任何操作。此外,删除一个空指针是可以的,根本不会做任何事情。
标签: c++ constructor destructor