让子对象引用其父对象而不是指针,这是不是一种糟糕的做法
Is it bad practice to have a child object have a reference to its parent object instead of a pointer?
与此相关,我想知道是否有理由使用指向父对象的指针(而不是父类)而不是引用。
显然,如果父级可以为null,则引用将不起作用。但是,如果父对象在其生存期内创建并销毁子对象,使子对象指向其父对象的指针永远不会为null,该怎么办?我认为在这种情况下听起来还可以,但我还没有看到其他人这样做,而且我还在学习很多关于C++的知识。
我想到的具体情况是一个专门的对话框窗口,它只能由某个窗口类创建。
有哪些问题(如果有的话)
class Child {
Child(Parent& parent) : parent_(parent) {}
Parent& parent_;
};
与
class Child {
Child(Parent* parent) : parent_(parent) {}
Parent* parent_;
};
人们会整天争论它,但引用只是有限的指针。不要为使用哪一种而苦恼。
指针的优点是,您可以复制子项,或者创建一个没有父项的子项,以便以后给它一个。如果你需要这样做,你必须使用一个指针。
如果没有,就用里面最暖和的。这根本不值得担心。
如果将指针设为Parent *const parent_
,则它实际上与引用相同。
引用和指针之间有一些区别:
参考文献:
- 引用必须在创建时初始化
- 一旦初始化为指向某个对象,就不能将参照更改为指向另一个对象
指针:
- 指针不需要初始化,可以指向NULL
- 您可以修改指针以指向另一个对象
后果:
因此,根据您希望在孩子和父母之间建立的关系,您将选择指针或引用。如果您不需要指针,也更喜欢引用指针。
换句话说,如果子对象在其生存期内具有相同的父对象,并且父对象在创建子对象时存在:请使用引用指向父对象。
相关文章:
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 在枚举类型上使用std::max是不是一种糟糕的做法
- std::元组大小,是不是错过了优化?
- boost::P rogram_options 一种判断值是从命令行还是 ini 文件的方法?
- 拥有相同方法的静态和非静态版本是不是设计不好
- 他是不是很贪婪
- 在DLL中分配内存并将其指针提供给客户端应用程序,这是不是一种糟糕的做法
- 在C++代码中使用C风格的注释是不是一种糟糕的做法
- 矢量的一种交换方式是可能的
- 在main.cpp中而不是在头文件中定义函数是不是一种糟糕的做法
- 重载一个函数同时获取指针或引用是不是一种糟糕的做法
- 让子对象引用其父对象而不是指针,这是不是一种糟糕的做法
- 嵌套渲染循环是不是一种糟糕的做法
- 在操作数据成员时:以下哪一种被认为是最佳实践
- 运算符==对其操作数进行变异是不是一种糟糕的做法
- 在c++中,依赖局部对象以相反的构造顺序被析构是不是一种不好的做法?
- 将函数代码与预处理器指令混合在一起是不是一种糟糕的做法
- C++:为了便于访问,在类中使用静态容器来包含指向其所有对象的指针是不是一种糟糕的做法
- POCO C++SAX解析器:如果xml文档编码是ANSI,那么下一条语句不是读取并抛出编码错误异常