在我的代码,我有两个向量:集合是否可能包含两个指向同一对象的共享指针?
vector<lipid*> lipids;
vector<shared_ptr<bead> > ions;
的lipid
类:
class lipid{
public:
lipid();
lipid(double x, double y, bool up, int LID);
~lipid();
void makeMe(int LID);
std::tr1::shared_ptr<bead> head;
std::tr1::shared_ptr<bead> body;
std::tr1::shared_ptr<bead> tail;
int LID;
vec direction;
};
我产生了头,身,尾珠脂质的构造。
std::tr1::shared_ptr<bead> he(new bead);
std::tr1::shared_ptr<bead> bo(new bead);
std::tr1::shared_ptr<bead> ta(new bead);
this->head = he;
this->body = bo;
this->tail = ta;
一些头由插入到离子载体中的脂质的:
vector<lipid*>::iterator lit = lipids.begin();
while (lit != lipids.end()){
lipid * l = *lit++;
if (l->head->charge != 0) this->ions.push_back(l->head);
}
其中charge
是bead
的整数属性。 我也有一个map<vector<int>, set<shared_ptr<bead> > >
来存放一些名为盒子的珠子。要添加bead
到任何映射值的使用:
bead b = l->head; //b white also be accessed through a beads vector that holds a shared pointer to all beads in the simulation
vector<int> t = b->getBox(); //a function that returns a valid box
boxes[t].insert(b);
在一个特定的部分我有一组命名cBeads
共享指针和I插入到它珠两个单独的环;第一个通过一些盒子,并插入到设置有豆变化的任何珠子,另一个遍历所有离子并插入它们。
我知道共享指针应该是指针的所有者,这是否意味着我可以放置两个共享指针,指向集合中的同一个对象?
我希望这对你有意义。
共享指针是资源的*共享*所有者。任何数量的共享指针可以共享相同的资源。只有当没有人离开时,资源才会被释放。 (难道这个问题真的要这么长的时间这么简单的点睛之笔?) –
的问题是,不是多个共享指针是否指的是同一个资源,它是多个共享指针指的同一资源是否可以被存储在'STD :: set'。 –