2012-07-07 75 views
0

由于性能原因(速度超过内存),我发现自己需要保留两个对象列表。C++对象列表仅为副本

我使用对象指针如

std::list<MyClass*> m_list1; 
std::list<MyClass*> m_list2; 

我通过

MyClass* myObject = new MyClass(); 
m_list1.push_back(myObject); 
m_list2.push_back(myObject); 

的问题我面对对象添加到列表中是改变我做出m_list1没有影响m_list2 ,显然他们是副本,而不是真正的交易。

什么是正确的方式来存储这些,所以他们不会被复制?不使用指针不是一个选项,因为这些都将被分配在堆上。

+2

*我对m_list1所做的更改不会影响m_list2 *您是说您在'm_list1'中删除/插入项目,但是'm_list2'没有更新?这是可以预料的。至于指针本身,它们指向相同的堆对象,因此在一个列表中对**实例**的更改将反映在另一个列表中。你能澄清你的困惑吗? – chrisaycock 2012-07-07 03:21:42

+0

看看['std :: shared_ptr'](http://en.cppreference.com/w/cpp/memory/shared_ptr),看看它是否不适合你的目的。 – 2012-07-07 05:28:17

回答

2

标准容器复制传入的值,但是由于您传入了指针,它就是被复制的指针。因此他们仍然指向同一个对象。问题一定在其他地方。也许你可以发布你认为展示这种行为的特定代码?

+0

在你的文章之后,我再次检查了我的代码,并忘记了我删除了一个新的对象并将其添加到列表中,这会弄乱这两个列表。愚蠢的错误> _> – 2012-07-07 03:26:09