工厂方法返回 shared_ptr 以实现安全的对象生命周期管理,适用于多组件共享对象、跨模块传递或避免手动 delete 的场景;通过 std::make_shared 创建对象可提升性能与异常安全,结合注册表支持动态扩展,但需注意循环引用和线程安全问题。

在C++中,结合智能指针与工厂模式是一种常见且推荐的做法,尤其当需要动态创建对象并管理其生命周期时。使用
std::shared_ptr
工厂模式用于封装对象的创建过程。返回
std::shared_ptr
std::unique_ptr
shared_ptr
delete
假设我们有一个基类
Product
#include <memory>
#include <string>
#include <map>
class Product {
public:
virtual ~Product() = default;
virtual void use() const = 0;
};
class ConcreteProductA : public Product {
public:
void use() const override {
std::cout << "Using Product A\n";
}
};
class ConcreteProductB : public Product {
public:
void use() const override {
std::cout << "Using Product B\n";
}
};
class ProductFactory {
public:
enum class Type {
A,
B
};
<strong>static std::shared_ptr<Product> create(Type type)</strong> {
switch (type) {
case Type::A:
return std::make_shared<ConcreteProductA>();
case Type::B:
return std::make_shared<ConcreteProductB>();
default:
return nullptr;
}
}
};
使用方式:
立即学习“C++免费学习笔记(深入)”;
auto product = ProductFactory::create(ProductFactory::Type::A);
if (product) {
product->use();
}
为了支持运行时注册新类型,可以使用映射表注册构造函数:
class ExtensibleFactory {
using Creator = std::function<std::shared_ptr<Product>()>;
std::map<std::string, Creator> creators;
public:
<strong>void registerCreator(const std::string& name, Creator creator)</strong> {
creators[name] = creator;
}
<strong>std::shared_ptr<Product> create(const std::string& name)</strong> {
auto it = creators.find(name);
return it != creators.end() ? it->second() : nullptr;
}
};
注册和使用:
ExtensibleFactory factory;
factory.registerCreator("A", []() { return std::make_shared<ConcreteProductA>(); });
factory.registerCreator("B", []() { return std::make_shared<ConcreteProductB>(); });
auto product = factory.create("A");
if (product) product->use();
使用
shared_ptr
std::weak_ptr
std::unique_ptr
std::make_shared
new
基本上就这些。返回
shared_ptr
以上就是C++智能指针工厂模式 返回shared_ptr工厂方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号