Set shared_ptr to point existing object

前端 未结 2 429
终归单人心
终归单人心 2021-01-04 20:18

For the code below, I would like to know how to set std::shared_ptr to point the given objects in the two member functions. The Vector3 object whic

相关标签:
2条回答
  • 2021-01-04 20:33

    Disregarding the argument about whether using shared_ptr is a good idea or not, as explained by the accepted answer, you can use the following if you continue to use shared_ptr:

    void addVtx (const Vector3& vt)
    {
        vtx.push_back(std::make_shared<Vector3>(vt));
    }
    
    void setVtx (size_t v, const Vector3& vt)
    {
        if ( vtx.size() > 0 && v < vtx.size() )
        {
           vtx[v] = std::make_shared<Vector3>(vt);
        }
    }
    
    0 讨论(0)
  • 2021-01-04 20:35

    There is not much point in using a shared_ptr for an automatically allocated object.

    Technically you can do it, by giving the shared_ptr a deleter that doesn't do anything, and changing your vtx to be a vector of shared pointers to const vectors.

    E.g. changing the declaration to

    vector < shared_ptr <Vector3 const> > vtx;
    

    and adding a pointer like this:

    vtx.push_back( shared_ptr<Vector3 const>( &vt, [](Vector3 const*){} ) );
    

    Disclaimer: untested code, not touched by a compiler.

    However, unless you're going to also add pointers to vectors that need to be deleted, just use a vector of raw pointers. Or, just use a vector of vectors, and copy the in-data.


    It's not a good idea to use raw pointers to hold ownership. For that use smart pointers.

    But conversely, it's not a good idea to use ownership smart pointers to hold pure references to static or automatic objects. For that, use raw pointers or references.

    In general. enter image description here

    0 讨论(0)
提交回复
热议问题