gpt4 book ai didi

c++ - 有没有办法为容器保留内存块?

转载 作者:太空宇宙 更新时间:2023-11-04 15:51:33 25 4
gpt4 key购买 nike

我希望我能说清楚....

在我的代码中,我定义了一个box,它包含一组元素(bead):

vector<vector<vector<set<std::tr1::shared_ptr<bead> > > > > boxes;

我正在使用以下方法向 box 添加元素:

boxes[i][j][k].insert(aBead);

出于某种原因,我在这里遇到了段错误。据我所知,由于非法beadijk,不会发生段错误>, 都小于盒子的尺寸并且不是负数。

如果您想知道 bead 是:

class particle{
public:
vec pos;
vec oldPos;
vec vel;
vec F;
vec oldF;
int charge;
int type;
double U;
double nextU;
};

class bead: public particle{
public: //most of this is redundant...
int charge;
int type;
double rho;
double nextRho;
int LID;
bool keep;
bool touch;
double radius;
}

class vec{
public:
double x;
double y;
double z;
velarray<double> coor; //on it's way to being canceled
}

最佳答案

创建 shared_ptr<T> 时,您将希望使用指向使用 new 创建的对象类型的指针来初始化它关键字,而不是实际对象或对象引用。例如:

shared_ptr<bead> ptr(new bead);

不是

bead aBead;
shared_ptr<bead>(aBead);

顺便说一句,不要做以下事情:

bead* ptr = new bead();
shared_ptr<bead> sptr(ptr);
delete ptr;

shared_ptr<bead>对象管理指针的生命周期。它会对指针进行引用计数,并调用delete。在 shared_ptr<T> 内部的指针上当不再有对指针的引用时析构函数。如果您手动调用 delete在初始化 shared_ptr<T> 之后的指针上对象,你最终也会遇到段错误,因为你基本上已经尝试过 self 管理内存生命周期,打败了托管“智能”指针的整个指针,如 shared_ptr<T> .

关于c++ - 有没有办法为容器保留内存块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7436373/

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