gpt4 book ai didi

c++ - 将 shared_ptr 设置为指向现有对象

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:00 28 4
gpt4 key购买 nike

对于下面的代码,我想知道如何设置 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 ,并复制输入数据。


使用原始指针来持有所有权不是一个好主意。为此,请使用智能指针。

但相反,使用所有权智能指针来保存对静态或自动对象的纯引用并不是一个好主意。为此,请使用原始指针或引用。

一般来说。 enter image description here

关于c++ - 将 shared_ptr 设置为指向现有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24049155/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com