对于下面的代码,我想知道如何设置 std::shared_ptr
以指向两个成员函数中的给定对象。在main函数中分配的Vector3
对象直到程序结束才会被删除。
#include <memory>
#include <vector>
using std::vector;
using std::shared_ptr;
class Vector3
{
// ...
};
class Face
{
vector < shared_ptr <Vector3> > vtx;
public:
void addVtx (const Vector3& vt)
{
// vtx.push_back (); <-- how to push_back ?
}
void setVtx (const int v, const Vector3& vt)
{
if ( vtx.size() > 0 && v < vtx.size() )
{
// vtx[v] = &vt; <-- how to assign ?
}
}
};
int main ()
{
vector <Vector3> vec (3);
Face face;
face.addVtx (vec[0]);
face.setVtx (0, vec[0])
return 0;
}
最佳答案
对自动分配的对象使用 shared_ptr
没有多大意义。
技术上您可以做到这一点,方法是为 shared_ptr
提供一个不执行任何操作的删除器,并将您的 vtx
更改为指向 const
vector 的共享指针的 vector 。
例如将声明更改为
vector < shared_ptr <Vector3 const> > vtx;
并像这样添加一个指针:
vtx.push_back( shared_ptr<Vector3 const>( &vt, [](Vector3 const*){} ) );
免责声明:未经测试的代码,未经编译器修改。
但是,除非您还打算添加指向需要删除的 vector 的指针,否则只需使用原始指针 vector 。或者,只使用 vector 的 vector ,并复制输入数据。
使用原始指针来持有所有权不是一个好主意。为此,请使用智能指针。
但相反,使用所有权智能指针来保存对静态或自动对象的纯引用并不是一个好主意。为此,请使用原始指针或引用。
一般来说。
关于c++ - 将 shared_ptr 设置为指向现有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24049155/