繁体   English   中英

将堆栈变量传递给采用 std::shared 指针的函数

[英]pass stack variable to function that takes a std::shared pointer

如果我有一个全局变量或堆栈变量,我可以将它传递给一个函数,该函数采用std::shared_ptr和这样的模板化类:

template<class T> class shared_ptr_stack:public std::shared_ptr<T> {
    public:
    shared_ptr_stack(T * target):std::shared_ptr<T>(target, [](T * t){}){};
    };
};

目标是避免在没有引用时破坏或删除内存。 代码编译并在测试中工作,但我担心我会调用未定义的行为或其他一些负面问题。

一个接受共享 ptr 的函数有权让你的数据无限期地持久化。 它可以将您的数据传递到不同的结构、线程等。

您的代码意味着当堆栈帧超出范围时,或在静态销毁时,数据将变成垃圾,这两种情况都可以在最后一个共享 ptr 副本消失之前。

使用共享 ptr 的 API 要求获得该权利。 你在撒谎。

除此之外,你的代码很好。 但是,我会使用工厂函数而不是子类。 您还可以使用共享 ptr 的别名构造函数来获取一些基于 RAII 的报告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM