这听起来很基本,以至于让我觉得我自己没有努力找到答案,但我发誓我搜索了大约20分钟而没有找到答案.
如果私有c ++类成员变量(非静态)是指针,并且它未在构造函数中初始化(通过初始化列表或构造函数中的赋值),那么在完全实例化类时它的值是什么?
额外的问题:如果上述问题的答案不是NULL,并且我希望始终将特定成员指针变量初始化为NULL,并且我有多个构造函数,那么我是否真的必须在每个构造函数中对该指针进行显式初始化我写的构造函数?如果是这样,专业人士如何处理这个?当然没有人真正为所有构造函数中的同一成员添加冗余初始化程序,是吗?
编辑: 我希望我能在这里选择两个答案.Bleep Bloop推荐的智能指针似乎是最优秀的方法,并获得了最多的投票.但是由于我在工作中实际上并没有使用智能指针,所以我选择了最不具有智能指针的说明性答案作为答案.
Moo*_*ice 10
你的想法正确.如果你没有初始化它,它可能是任何东西.
所以你的问题的答案是,或者用某个东西初始化它,或者给它一个NULL(或者在最新的C++标准中为nullptr).
class A
{
};
class B
{
private:
A* a_;
public:
B() : a_(NULL) { };
B(a* a) : a_(a) { };
};
Run Code Online (Sandbox Code Playgroud)
我们这里的默认ctor使它为NULL(nullptr如果需要替换),第二个构造函数将使用传递的值初始化它(也不保证是好的!).
小智 8
该值将是未初始化的,所以是的,您需要明确初始化它nullptr.
使用智能指针(std::unique_ptr,std::shared_ptr,boost::shared_ptr等),将意味着你不需要明确地做到这一点.