#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