如何解决从外部类继承的嵌套私有类的正确模式
我试图在 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 举报,一经查实,本站将立刻删除。