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

Correct pattern for nested private class that inherit from outer class

我正在尝试在 C++ 中实现一种模式,其中嵌套的私有 class 从外部 class 继承,私有 class 通过外部的静态工厂方法实例化摘要 class.

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

Search.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;
}

想过吗?

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

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

静态工厂方法总是return指针类型。所以 create 函数应该 return 现代 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