【发布时间】:2010-12-23 04:49:02
【问题描述】:
传统上,在 C++ 中,您将在构造函数中创建任何依赖项并在析构函数中删除它们。
class A
{
public:
A() { m_b = new B(); }
~A() { delete m_b; }
private:
B* m_b;
};
这种资源获取技术/模式,有没有通用的名字?
我很确定我在某处读过它,但现在找不到。
编辑:
正如许多人指出的那样,这个类是不完整的,应该真正实现一个复制构造函数和赋值运算符。
最初,我故意将其省略,因为它与实际问题无关:模式的名称。但是,为了完整性和鼓励良好实践,公认的答案就是这样。
【问题讨论】:
-
Bad class A. 缺少复制构造函数和赋值运算符。
-
如果不需要复制/分配,一个更简单的解决方案是从 boost::noncopyable 派生。无需定义这两个函数。 (并确保它们不会被意外调用)
-
对动态内存的使用毫无意义。这门课的设计和格式真是太糟糕了。总体而言,这是一个多么糟糕的 C++ 示例。你为什么要那样做?无论如何,您为什么会以如此毫无意义的方式使用 new 和 delete 。只需执行
class A{ B m_b = {}; },您就会得到几乎相同的结果,但没有危险的指针,并且使用的代码不到 1/4。 -
您不需要使用
private:,因为class关键字的全部意义是将成员定义为默认值,因为它们应该位于类的顶部,并且没有隐藏在底部的地方,您需要向下滚动整个页面才能看到它们。在我 30 年的编程生涯中,我从未见过将成员置于底层的单一论点,而该语言显然意味着将它们置于顶层。
标签: c++ design-patterns raii