【发布时间】:2017-02-27 17:03:01
【问题描述】:
在程序中传递对象、避免访问未初始化的成员变量有哪些好的实践选项。
我写了一个小例子,我认为很好地解释了这个问题。
#include <vector>
using namespace std;
class container{public:container(){}
vector<int> LongList;
bool otherInfo;
};
class Ship
{
public:Ship(){}
container* pContainer;
};
int main()
{
//Create contianer on ship1
Ship ship1;
ship1.pContainer = new container;
ship1.pContainer->LongList.push_back(33);
ship1.pContainer->otherInfo = true;
Ship ship2;
//Transfer container from ship1 onto ship2
ship2.pContainer = ship1.pContainer;
ship1.pContainer = 0;
//2000 lines of code further...
//embedded in 100 if statements....
bool info = ship1.pContainer->otherInfo;
//and the program crashes
return 0;
}
【问题讨论】:
-
好的做法是初始化对象构造函数中的所有内容。
-
Ja 但这在这种情况下没有帮助。 ship1 左侧根本没有容器(为了保持我的示例语言)。
-
怎么不呢?您可以初始化指向 nullptr 的指针。
-
因为 op 正在谈论防止空指针取消引用,这与未初始化的成员无关。未初始化的成员很有可能在发布编译中不为空。好的做法是始终初始化。
-
@Jean 当然可以——如果指针未初始化,则无法测试它是否为空。
标签: c++ containers