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
已经是临时的,不会有任何效果。
我正在尝试 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
已经是临时的,不会有任何效果。