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

在C++中,结合智能指针与工厂模式是一种常见且推荐的做法,尤其当需要动态创建对象并管理其生命周期时。使用
std::shared_ptr
作为工厂方法的返回类型,可以自动管理对象的内存,避免资源泄漏,同时提高代码的安全性和可维护性。
为什么工厂方法返回 shared_ptr?
工厂模式用于封装对象的创建过程。返回
std::shared_ptr
而不是原始指针或
std::unique_ptr
,主要适用于以下场景:
多个组件可能共享同一个对象实例,需要引用计数来管理生命周期。 对象可能被放入容器、传递给回调、或跨模块使用,
shared_ptr
提供灵活的所有权管理。 避免用户手动调用
delete
,防止内存泄漏。
基本实现示例
假设我们有一个基类
Product
和多个派生类,通过工厂创建具体对象:
#include #include #include
使用方式:
立即学习“C++免费学习笔记(深入)”;
auto product = ProductFactory::create(ProductFactory::Type::A);if (product) { product->use();}
支持扩展的工厂设计
为了支持运行时注册新类型,可以使用映射表注册构造函数:
class ExtensibleFactory { using Creator = std::function<std::shared_ptr()>; std::map creators;public: void registerCreator(const std::string& name, Creator creator) { creators[name] = creator; } std::shared_ptr create(const std::string& name) { auto it = creators.find(name); return it != creators.end() ? it->second() : nullptr; }};
注册和使用:
ExtensibleFactory factory;factory.registerCreator("A", []() { return std::make_shared(); });factory.registerCreator("B", []() { return std::make_shared(); });auto product = factory.create("A");if (product) product->use();
注意事项
使用
shared_ptr
工厂时需注意:
避免循环引用,必要时使用
std::weak_ptr
。 如果对象不应被共享,考虑返回
std::unique_ptr
更合适。 在多线程环境下注册或调用工厂方法时,需对注册表加锁保护。 尽量使用
std::make_shared
而非
new
,提升性能并确保异常安全。
基本上就这些。返回
shared_ptr
的工厂方法是现代C++中管理动态对象生命周期的推荐方式,既安全又灵活。
以上就是C++智能指针工厂模式 返回shared_ptr工厂方法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1472321.html
微信扫一扫
支付宝扫一扫