gpt4 book ai didi

c++ - 使用 init-methods 来避免使用 new 分配对象——这是糟糕的设计吗?

转载 作者:太空宇宙 更新时间:2023-11-04 15:17:16 26 4
gpt4 key购买 nike

我最近开始在 C++ 中设计类时使用 init 方法而不是将参数传递给构造函数:

Class A {
public:
A();
init(int number);
...
};

代替:

Class A {
public:
A(int number);
};

这允许我像这样在其他类中使用 A 作为成员:

class B {
A m_a;
};

而不是我以前做的方式:

class B {
A *m_a;
};

(然后在 B 的构造函数中分配 m_a。)

使用 init 函数的好处是我不必担心删除 m_a,因为它会在 B 的实例被销毁时被销毁。

我的问题是:使用 init 方法有什么我应该知道的缺点吗?这会溢出堆栈等吗?

到目前为止一切正常,但我认为在以这种方式编写大量代码之前我应该​​先询问一下。

最佳答案

这是一个可怕的模式。

对象在构造和调用 init 之间将处于未定义状态。此外,您还必须考虑使 init 线程安全,以及在多次调用时使 init 健壮。

另请注意,从 c++11 开始,您可以从另一个构造函数调用构造函数。因此,关于 init 函数消除了因具有多个构造函数而可能产生的代码重复的论点不再适用。

关于c++ - 使用 init-methods 来避免使用 new 分配对象——这是糟糕的设计吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29704478/

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