微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从外部类继承的嵌套私有类的正确模式

如何解决从外部类继承的嵌套私有类的正确模式

我试图在 C++ 中实现一种模式,其中嵌套私有类从外部类继承,私有类通过外部抽象类中的静态工厂方法实例化。

我现在有这段代码,可以编译,但我不确定我是否正确。

搜索.h:

namespace ns_4thex {
    class Search {
        private:
            class Implementation;
        public:
            static Search & create();
            virtual int doIt() = 0;
    };
    class Search::Implementation: public Search {
        int doIt();
    };
}

Search.cpp:

#include "Search.h"
using namespace ns_4thex;
Search & Search::create() {
    return *(new Search::Implementation());
}

int Search::Implementation::doIt() {
    return 0;
}

想过吗?

解决方法

您的示例可能存在内存泄漏。工厂模式应该返回一个指针类型而不是引用类型。使用它的调用者可以释放分配的内存

Search* Search::create() {
    return new Search::Implementation();
}
,

静态工厂方法总是返回一个指针类型。所以 create 函数应该返回一个指针或现代 C++ 中的智能指针。

声明:

static std::unique_ptr<Search> create();

定义:

std::unique_ptr<Search> Search::create() {
  return std::make_unique<Search::Implementation>();
}

完整的代码可能是这样的:

#include <memory>
namespace ns_4thex {
class Search {
 private:
  class Implementation;

 public:
  static std::unique_ptr<Search> create();
  virtual int doIt() = 0;
};

class Search::Implementation : public Search {
  int doIt();
};

std::unique_ptr<Search> Search::create() {
  return std::make_unique<Search::Implementation>();
}

int Search::Implementation::doIt() { return 0; }
}  // namespace ns_4thex

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。