如何将 boost::weak_ptr 转换为 boost::shared_ptr

发布于 2024-09-26 15:42:34 字数 263 浏览 6 评论 0原文

我有一个shared_ptr和一个weak_ptr

typedef boost::weak_ptr<classname> classnamePtr;
typedef boost::shared_ptr<x> xPtr;

如何将weak_ptr转换为shared_ptr

shared_ptr = weak_ptr;
Xptr = classnameptr; ?????

i have a shared_ptr and a weak_ptr

typedef boost::weak_ptr<classname> classnamePtr;
typedef boost::shared_ptr<x> xPtr;

how to convert a weak_ptr to a shared_ptr

shared_ptr = weak_ptr;
Xptr = classnameptr; ?????

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

秋千易 2024-10-03 15:42:34

正如已经说过的,

boost::shared_ptr<Type> ptr = weak_ptr.lock(); 

如果您不希望出现异常或只是使用强制转换构造函数,

boost::shared_ptr<Type> ptr(weak_ptr);

那么如果弱指针已被删除,则会抛出异常。

As already said

boost::shared_ptr<Type> ptr = weak_ptr.lock(); 

If you do not want an exception or simply use the cast constructor

boost::shared_ptr<Type> ptr(weak_ptr);

This will throw if the weak pointer is already deleted.

夢归不見 2024-10-03 15:42:34

您不要将 weak_ptr 转换为 shared_ptr,因为这会破坏使用 weak_ptr 的初衷。

要从 weak_ptr 的实例获取 shared_ptr,请在 weak_ptr 上调用 lock
通常您会执行以下操作:

weak_ptr<foo> wp = ...;

if (shared_ptr<foo> sp = wp.lock())
{
    // safe to use sp
}

You don't convert a weak_ptr to a shared_ptr as that would defeat the whole purpose of using weak_ptr in the first place.

To obtain a shared_ptr from an instance of a weak_ptr, call lock on the weak_ptr.
Usually you would do the following:

weak_ptr<foo> wp = ...;

if (shared_ptr<foo> sp = wp.lock())
{
    // safe to use sp
}
将军与妓 2024-10-03 15:42:34
boost::shared_ptr<Type> ptr = weak_ptr.lock(); // weak_ptr being boost::weak_ptr<Type>
boost::shared_ptr<Type> ptr = weak_ptr.lock(); // weak_ptr being boost::weak_ptr<Type>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文