C++智能指针工厂模式 返回shared_ptr工厂方法

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

c++智能指针工厂模式 返回shared_ptr工厂方法

在C++中,结合智能指针与工厂模式是一种常见且推荐的做法,尤其当需要动态创建对象并管理其生命周期时。使用

std::shared_ptr

作为工厂方法的返回类型,可以自动管理对象的内存,避免资源泄漏,同时提高代码的安全性和可维护性。

为什么工厂方法返回 shared_ptr?

工厂模式用于封装对象的创建过程。返回

std::shared_ptr

而不是原始指针或

std::unique_ptr

,主要适用于以下场景:

多个组件可能共享同一个对象实例,需要引用计数来管理生命周期。 对象可能被放入容器、传递给回调、或跨模块使用,

shared_ptr

提供灵活的所有权管理。 避免用户手动调用

delete

,防止内存泄漏。

基本实现示例

假设我们有一个基类

Product

和多个派生类,通过工厂创建具体对象:

#include #include #include class Product {public:    virtual ~Product() = default;    virtual void use() const = 0;};class ConcreteProductA : public Product {public:    void use() const override {        std::cout << "Using Product An";    }};class ConcreteProductB : public Product {public:    void use() const override {        std::cout << "Using Product Bn";    }};class ProductFactory {public:    enum class Type {        A,        B    };    static std::shared_ptr create(Type type) {        switch (type) {            case Type::A:                return std::make_shared();            case Type::B:                return std::make_shared();            default:                return nullptr;        }    }};

使用方式:

立即学习“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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月18日 19:31:01
下一篇 2025年12月18日 19:31:15

相关推荐

发表回复

登录后才能评论
关注微信