gpt4 book ai didi

C++多构造函数初始化和销毁

转载 作者:搜寻专家 更新时间:2023-10-31 01:48:12 25 4
gpt4 key购买 nike

我有一个有两个构造函数的类:

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(双 a) : mymap(), mypointer(NULL) {}

我的析构函数安全吗?或者我应该删除 if 条件并直接执行删除。

最佳答案

您需要初始化两个构造函数中的所有成员。

例如,考虑一下您在其中一个构造函数中初始化的指针。由于另一个构造函数没有初始化它,那么它的值将是未定义的,因此在析构函数中检查指针时你有未定义的行为。

关于C++多构造函数初始化和销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18186505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com