#include <iostream>
#include <vector>
#include <functional>
#include <memory>
using namespace std;
struct A
{
A() {}
~A() { cout << "des" << endl; }
};
int main()
{
cout << "1." << endl;
{
vector< A > a;
a.emplace_back( A() );
}
cout << "2." << endl;
{
vector< A* > a;
a.emplace_back( new A );
a.clear();
}
cout << "3." << endl;
{
vector< reference_wrapper< A > > a;
a.emplace_back( *( new A ) );
a.clear();
}
cout << "4." << endl;
{
vector< unique_ptr< A > > a;
a.emplace_back( new A );
}
return 0;
}
출력 :
1. des // 인자로 넘길때 만들어진 A() des // 중괄호의 끝을 만나며 해제됨 ( 자동 clear ) 2. // 포인터 타입은 clear() 해도 해제되지 않음. 3. // 레퍼런스 타입도 마찬가지 4. des // unique_ptr 은 해제됨 하지만 쬐끔 무겁.
복잡하지 않은 코드에서 성능이 필요할땐 걍 노가다 delete
포인터에 대한 템플릿으로 일괄 해제해주는 함수 하나 맹그러놓으면 편하긔
ㄴ ㅇㅇ 편한 노가다~
보통 벡터같은 컨테이너들도 혼자 돌아댕기는 경우보다 클래스의 멤버로 구성할때가 많아서 명시적으로 해제해버리징~
unique_ptr 해제될 때 빼고는 힙 엘로케이션이랑 그렇게 차이 안 나지 않나요
응 크진 않아. 근데 생성, 이동시 쬐끔 쬐끔한 작업들을 하잖아. 카운터나 지우기 같은거.