我是 C++ 的新手(但不是 C 或 OOP),但我正在尝试以“正确”的方式做事并避免任何不良和/或危险的习惯,所以我使用 Google 的 C++ 编码指南和有效的 C++ 作为我学习的起点。
我有一个抽象基类,其成员是 unique_ptr
。如果我将其设为私有(private)并且仅通过 getter 提供对派生类的访问(根据 Google C++ 样式指南),这是最好的方法吗?或者我在这里错过了一个潜在的陷阱?
基础.h:
#include "Document.h"
typedef std::unique_ptr<Document> pDOC;
class Base {
public:
Base();
virtual ~Base() = 0;
pDOC& GetDoc();
private:
// Unique pointers cannot be shared, so don't allow copying
Base(Base const &); // not supported
Base &operator=(Base const &); // not supported
pDOC m_doc;
};
基础.cpp
#include "base.h"
Base::Base()
: m_xmldoc(new Document) {}
// Class destructor (no need to delete m_doc since it is a smart pointer)
Base::~Base() {}
pDOC& Base::GetDoc() {
return m_doc;
}
最佳答案
首先,将其称为 upDoc
而不是 pDOC
-- unique_ptr
非常奇怪,您需要一些指示表明该类型不是它只是一个指针。 (有一种强烈的趋势是将指针类型定义为以小写 p 开头,因此很多人可能会对您的使用感到困惑)。
其次,GetDoc
如果它仅用于派生类,则应protected
而不是 public
。
第三,我质疑向所有 child 完全公开对 unique_ptr
的引用。 Base
的职责是什么?它是否管理 m_doc
的生命周期?如果是这样,请公开一个 Document*
而不是 upDoc
(return m_doc.get();
而不是 return m_doc;
)
如果所有 Base
所做的只是持有一个 m_doc
而不管理它的生命周期,那么它为什么存在?它不提供公共(public)接口(interface),并且几乎不提供任何功能。
关于c++ - 在抽象基类中使用 unique_ptr 作为私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14363172/