2012-07-07 3 views
0

성능상의 이유로 (메모리 초과) 두 가지 개체 목록을 유지해야합니다. 내가 직면하고있어C++ 개체 목록은 복사 만 가능합니다.

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

문제가 목록에 개체를 추가 등

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

내가 객체 포인터를 사용하고있어 변경 내가 m_list1로 만들 m_list2에 영향을 미치는하지 않는 것입니다 , 그래서 분명히 그들은 복제품이 아니라 진짜 거래입니다.

이러한 내용을 저장하는 올바른 방법은 무엇입니까? 포인터를 사용하지 않는 옵션은 모두 힙에 할당되므로 옵션이 아닙니다.

+2

* m_list1에 대한 변경 사항은 m_list2에 영향을 미치지 않습니다. * 'm_list1'에서 항목을 삭제/삽입하지만'm_list2 '에서 업데이트가 없다고 말하는 것입니까? 그것은 예상된다. 포인터 자체는 동일한 힙 오브젝트를 가리키고 있으므로 한 목록의 ** 인스턴스 ** 변경 사항이 다른 목록에 반영됩니다. 혼란을 분명히 할 수 있습니까? – chrisaycock

+0

['std :: shared_ptr'] (http://en.cppreference.com/w/cpp/memory/shared_ptr)을 보시고 귀하의 목적에 맞지 않는지 확인하십시오. –

답변

2

표준 컨테이너는 전달 된 값을 복사하지만 포인터를 전달한 이후로 복사 된 포인터입니다. 그러므로 그들은 여전히 ​​같은 대상을 가리키고 있습니다. 문제는 다른 곳에서 발생해야합니다. 아마도이 동작을 나타내는 것으로 생각되는 특정 코드를 게시 할 수 있습니까?

+0

게시물을 게시 한 후 코드를 두 번 확인하고 두 목록을 엉망으로 만들 목록 중 하나에 새 개체를 추가하고 삭제한다는 사실을 잊어 버렸습니다. 어리석은 실수> _> –