vector 와 boost를 연결하자.
STL 2007. 9. 6. 14:41 |vector <> 에 포인터 객체를 넣게 되면 많은 부분 불편한게 생긴다.
메모리의 삭제에 있어서 다른 처리를 해야 하기 때문이다.
하지만 boost의 shared_ptr를 사용하면 아주 편하게 구현이 됩니다.
관련 내용 : http://crowmania.cafe24.com/crowmania/?p=50
[헤더]
#include <vector>
using namespace std;
#include <boost/shared_ptr.hpp>
//테스트할 클래스 구성
class CMemTest
{
public:
CMemTest() : _val(0)
{
}
CMemTest(int val)
{
_val = val;
}
~CMemTest()
{
}
int _val;
};
//부스터에 맞는 타입디파인
typedef boost::shared_ptr<CMemTest> SPMemTest;
[코드]
vector<SPMemTest> m_SPMemTest;
SPMemTest sp1 = SPMemTest(new CMemTest);
m_SPMemTest.push_back(sp1);
m_SPMemTest.push_back(sp1);
m_SPMemTest.pop_back();
m_SPMemTest.pop_back();
//이렇게 하면 삭제가 됩니다.
//다른 방법으로 사용하면 아래도 가능하죠
m_SPMemTest.push_back(SPMemTest(new CMemTest(10)));
m_SPMemTest.push_back(SPMemTest(new CMemTest));
//값을 사용할때
. 가 아니고 -> 를 사용해야 합니다.
m_SPMemTest[0]->_val = 10;
//erase와 clear만 사용하면 자동으로 메모리 삭제 됨
count = m_SPMemTest.size();
m_SPMemTest.erase(m_SPMemTest.begin());
count = m_SPMemTest.size();
m_SPMemTest.clear();