enable_shared_from_this (c++0x): what am I doing wrong?

前端 未结 2 1846
灰色年华
灰色年华 2020-12-11 03:45

I\'m just toying around with the smart pointers in the upcoming new c++ standard. However I fail to grasp the usage of the shared_from_this function. Here is what I have:

相关标签:
2条回答
  • 2020-12-11 04:14

    It is a precondition of using shared_from_this that there must exist at least one shared_ptr which owns the object in question. This means that you can only use shared_from_this to retrieve a shared_ptr that owns an object to which you have a reference or pointer, you cannot use it to find out if such an object is owned by a shared_ptr.

    You need to rework your design so that either you are guaranteed that any such object is being managed by a shared_ptr or that you don't ever need to know or finally (and least desirably) you create some other way of managing this knowledge.

    0 讨论(0)
  • 2020-12-11 04:32

    To extend Charles answer, when you use enable_shared_from_this you usually want something like below in order to guarantee that there exists a shared_ptr.

    class my_class : public std::enable_shared_from_this<my_class>
    {
    public:
        static std::shared_ptr<my_class> create() // can only be created as shared_ptr
        {
             return std::shared_ptr<my_class>(new my_class());
        }
    private
        my_class(){} // don't allow non shared_ptr instances.
    };
    
    0 讨论(0)
提交回复
热议问题