传递栈变量给接受std::shared指针的函数



如果我有一个全局变量,或者一个堆栈变量,我可以把它传递给一个函数,这个函数接受一个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的报告。

最新更新