C++:返回共享指针会破坏对象

C++: returning shared pointer destroys the object

我正在尝试 return 一个新的 shared_ptr 方法:

std::shared_ptr<VertexBuffer> VertexBuffer::Create(float* vertices, uint32_t size)
{
    return std::make_shared<OpenGLVertexBuffer>(std::move(OpenGLVertexBuffer(vertices, size)));
}

我有一个析构函数,VertexBuffer 在退出此方法后被销毁。这是为什么?

正在对这个临时对象调用析构函数:

return std::make_shared<OpenGLVertexBuffer>(std::move(OpenGLVertexBuffer(vertices, size)));
                                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

您稍微误用了 std::make_shared 并调用了 move/copy 构造函数。如果您的 class 遵循 Rule of Three/Five/Zero,这应该不是正确性问题,但它效率低下。

您应该直接使用 std::make_shared 构造对象,即 转发 构造函数参数,而不是显式构造对象。

return std::make_shared<OpenGLVertexBuffer>(vertices, size);

另请注意,调用 std::move(x)x 已经是临时的,不会有任何效果。