【发布时间】:2020-10-09 17:24:40
【问题描述】:
非常基本的问题。与设计偏好有关,但我认为我遗漏了一些注意事项。
我想在另一个类中有一个类的实例。在我看来,我有 3 个选择:
-
将对象
class2放在class1中,如下所示。这意味着它是在构造class1的实例时构造的。我的问题是它可能需要默认和/或复制构造函数?当我在下面实例化一个class1对象时,它是否使用该构造函数构造class2_inst(args)?或者class2_inst是否已经使用一些默认构造函数创建并且class2_inst(args)行只是复制 一个匿名class2对象?class class2 { public class2(args) { ... } } class class1 { protected class2 class2_inst; public class1(args) : class2_inst(args) { ... } } -
我可以有一个指向
class2的指针:class class2 { public class2(args) { ... } } class class1 { protected class2* class2_inst; public class1(args) { class2_inst = new class2(args); ... } }这样做的好处是 class2 在我明确调用 new 运算符之前不会被实例化。
-
然后是使用引用而不是指针:
class class2 { public class2(args) { ... } } class class1 { protected class2& class2_inst; public class1(args) { class2_inst = new class2(args); ... } }
我希望class2_inst 的寿命与class1 相匹配。让class2_inst 住在class1 之外没有什么好笑的。所以参考可能是要走的路。
在这 3 种方法中,哪种方法是每个人的首选方法,为什么?
【问题讨论】:
-
真的没有偏好,这完全取决于您的具体用例。
-
public class1(args)不是有效的 C++ -
@user253751 显然,显示的代码只是伪代码,并不意味着按原样编译。
-
@RemyLebeau 那些 sn-ps 无论如何都没有意义......
-
你说得对,我会改正的。
标签: c++ oop c++11 design-patterns