标准::enable_shared_from_this ..新shared_ptr知道服用shared_from_thi
std::enable_shared_from_this ... Does a new shared_ptr know to take shared_from_this()?
我有一个派生自enable_shared_from_this
的类...(最近从 Boost 添加到标准)
class Blah : public std::enable_shared_from_this<Blah>
{
};
我知道我应该从这样的实例创建共享指针:
Blah* b = new Blah();
std::shared_ptr<Blah> good(b->shared_from_this());
问题是,如果我做这样的事情,它会隐式地接受对象的weak_ptr吗:
std::shared_ptr<Blah> bad(new Blah());
还是只会创建一个单独的共享指针计数器?(我怀疑)
Blah* b = new Blah();
std::shared_ptr<Blah> good(b->shared_from_this()); // bad, *b is not yet owned
这是不正确的。要使shared_from_this
正常工作,b
必须至少由一个shared_ptr
拥有。您必须使用:
std::shared_ptr<Blah> b = new B();
Blah* raw = b.get();
std::shared_ptr<Blah> good(raw->shared_from_this()); // OK because *raw is owned
当然,在这个微不足道的例子中,它更容易使用:
std::shared_ptr<Blah> good(b);
这在本质上并没有什么问题:
std::shared_ptr<Blah> bad(new Blah());
由于new B()
会创建新B
因此新创建的B
对象不存在其他单独的共享指针计数。
相关文章:
- 如何解决"invalid conversion from 'char' to 'const char*'"
- std::async from std::async in windows xp
- 引用 std::shared:ptr 以避免引用计数
- std::is_reference from std::any
- std::time_point from and to std::string
- "No suitable conversion function from 'std::string' to 'const char *' exists"
- std::chrono::time_point from std::string
- Visual accept std::string from std::byte iterator
- C++中链表的错误"Abort signal from abort(3) (sigabrt) "
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- C++ 中的"template <typename From, typename Tag> struct Alias;"是什么?
- from std::vector to adept::avector
- qt get child (Callout) from QChart
- Webassembly from Javascript
- Generate boost::uuids::uuid from boost::compute::detail::sha
- 无法使用 libtool 将 -shared 参数传递给 g++
- 什么是"Reading unbounded stream from standard input (Memory Management)"的例子
- Calling C++ dll from python
- 为什么我会收到"invalid conversion from 'Queue*/Stack*' to 'int'"错误消息?
- std::chrono 在从 main 或 from 类方法使用时给出不同的值