这听起来是非常基本的,因为我觉得我没有努力找到自己的答案,但我发誓我搜索约20分钟,没有找到答案.
如果私有c类成员变量(非静态)是一个指针,并且在构造函数中未初始化(通过初始化列表或构造函数中的赋值),当该类完全实例化时,它的值是多少?
奖金问题:如果上述问题的答案不是NULL,而且我希望始终将特定的成员指针变量初始化为NULL,并且我有多个构造函数,那么我真的必须在每个建设者我写?如果是这样,专业人士如何处理?当然,没有人真的为所有构造函数中的同一个成员添加了冗余的初始化器,是吗?
编辑:我希望在这里可以选择两个答案. Bleep Bloop推荐的智能指针似乎是最优雅的方法,它获得了最多的投票.但是由于我在工作中并没有使用智能指针,所以我选择了最有说明性的答案,没有使用智能指针作为答案.
解决方法
你正在思考如果你没有初始化它,它可能是任何东西.
所以你的问题的答案是,或者用某种东西进行初始化,或给它一个NULL(或nullptr,在最新的C标准).
class A { }; class B { private: A* a_; public: B() : a_(NULL) { }; B(a* a) : a_(a) { }; };
我们的默认ctor在这里使其为NULL(如果需要则替换为nullptr),第二个构造函数将使用传递的值进行初始化(这也不能保证是好的!).