从外部 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
我正在尝试在 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