gpt4 book ai didi

c++ - 何时在 C++ 中使用成员指针变量

转载 作者:搜寻专家 更新时间:2023-10-30 23:57:33 24 4
gpt4 key购买 nike

我对最佳实践的 C++ 设计/实现有疑问。我发现自己很难决定一个成员变量是否应该是指针。

假设我有这样一个类:

class Person{
public:
string name;
int age;
Child c;
};

假设我希望“Child c”是动态的。可以说,在创建一个“人”时,我不确定这个人是否有 child 。可能是这个人有 child ,也可能没有 child 。考虑到这一点,如果此人一个 child ,我希望能够 checkin 代码。

声明为“Child* c”还是“Child c”更好?

鉴于此,是否更好

class Person{
public:
string name;
int age;
Child* c;
};

最佳答案

简介

如果您想让Person 生 child ,或者不生 child ,那真的毫无疑问;您不能将 Person 声明为具有 Child 类型的数据成员。通过将一个 child 作为数据成员,Person 将无条件地将一个 child 作为数据成员。

您当然可以通过指向子对象的指针来解决这个问题,然后将能够引用子对象 如果存在,或者在 pointer-to-Child 中有一个 nullptr 来表示不存在这样的 child 。


进一步思考

您需要决定 Person 是应该拥有一个 child ,还是只能推荐一个 child 。

  • 如果您确定是其 child 的所有者,建议您通过表达这种所有权> std::unique_ptr ,这也将简化处理所述 child 的生命周期。

  • 如果您希望 Person 在其他实例(或其他代码段)之间共享一个 child ,请使用 std::shared_ptr .

  • 如果您只是希望 Person 能够引用一个子对象(根本没有所有权),并且能够更改 Person 所引用的子对象(如果有的话);使用原始指针。

  • 如果您希望 Person 能够引用一个已经存在的 child ,从生命周期的开始到结束,请使用由 的构造函数初始化的引用>人


如果我真的想要一个 child 作为每个人的数据成员怎么办?

您可以让 Child 包含某种信息,告诉您它的内部状态,“活着”“不活着” 但这在表达方面不是很清楚,或者用类似的方法表达 Person 中的“有一个 child ”

关于c++ - 何时在 C++ 中使用成员指针变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24191914/

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