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

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

如果我有一个全局变量,或者一个堆栈变量,我可以将它传递给一个带有 std::shared_ptr 和模板化 class 的函数,如下所示:

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 副本死亡之前。

API 获取共享 ptr 是在请求​​该权利。你在骗它。

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