gpt4 book ai didi

c++ - 在抽象基类中使用 unique_ptr 作为私有(private)成员

转载 作者:太空狗 更新时间:2023-10-29 21:02:55 25 4
gpt4 key购买 nike

我是 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/

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