C类中的指针成员变量初始化

新手上路,请多包涵

这听起来很基本,以至于让人觉得我自己找到答案的努力为零,但我发誓我确实搜索了大约 20 分钟,但没有找到答案。

如果私有 c++ 类成员变量(非静态)是一个指针,并且它没有在构造函数中初始化(通过初始化列表或构造函数中的赋值),那么当类完全实例化时,它的值是多少?

奖励问题:如果上述问题的答案不是 NULL,并且我希望始终将特定的成员指针变量初始化为 NULL,并且我有多个构造函数,我真的必须在每个我写的构造函数?如果是这样,专业人士如何处理这个问题?肯定没有人真正在其所有构造函数中为同一个成员放置冗余初始化器,是吗?

编辑: 我希望我能在这里选择两个答案。 Bleep Bloop 推荐的智能指针似乎是最优雅的方法,并且获得了最多的支持。但是由于我在工作中实际上并没有使用智能指针(还),所以我选择了没有使用智能指针的最具说明性的答案作为答案。

原文由 John Fitzpatrick 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

你的想法是正确的。如果你不初始化它,它可能是任何东西。

所以你的问题的答案是,要么用一些东西初始化它,要么给它一个 NULL(或 nullptr,在最新的 C++ 标准中)。

 class A
{
};

class B
{
private:
    A* a_;

public:
    B() : a_(NULL) { };
    B(a* a) : a_(a) { };
};

我们这里的默认 ctor 将其设为 NULL(如果需要,请替换为 nullptr ),第二个构造函数将使用传递的值对其进行初始化(这也不能保证是好的!)。

原文由 Moo-Juice 发布,翻译遵循 CC BY-SA 3.0 许可协议

值将是未定义的。

您可能有一个“最终”ctor,它将初始化 所有 字段并添加仅具有部分参数的“快捷”ctor,它将这些参数与其余参数的默认值一起传递给最终 ctor。

原文由 Victor Sorokin 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏