Lyn
조회 수 36762 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
아래코드는 C++ Builder 2009에서 테스트되었습니다.

//---------------------------------------------------------------------------

#include <vcl.h>
#include <vector>
#include <memory>
#include <iostream>
#include <cstdlib>
#pragma hdrstop

#include <tchar.h>

using namespace std;
using namespace std::tr1;

class Test
{
public:
    int i;
    Test()
    {
        cout << "Test is Create!" << endl;
    }
    Test(const Test& )
    {
        cout << "Test's Copy Constructor!" << endl;
    }
    ~Test()
    {
        cout << "Test is Destroy!" << endl;
    }
};
using namespace std;

//---------------------------------------------------------------------------

#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
    cout << "스택에 1개 생성" <<endl;
    Test t1; // 생성 되고, 함수가 끝날때 파괴 될 것

    cout << "힙에 1개 생성" <<endl;
    Test* t2 = new Test; //생성
    cout << "힙에서 1개 파괴" <<endl;
    delete t2; //파괴

    cout << "스택에 10개 생성" <<endl;
    Test t3[10];
    vector<Test> v1;

    cout << "복사생성자가 작동한다" <<endl;
    for(int i=0;i<10;++i)
    {
        v1.push_back(t3[i]);
        //이렇게 하면 Copy Contructor 가 작동하므로 오버헤드가 큼
        //게다가 반드시 동적으로 할당해야 하는 VCL 객체에는 사용이 불가능
    }

    cout << "힙에 10개 생성 후 Vector에 넣는다" << endl;
    vector<Test*> v2;
    for(int i=0;i<10;++i)
    {
        Test* tt = new Test;
        v2.push_back(tt);
        //이렇게 하면 동적으로 할당할 수 있음.
        //그러나 vector 를 파괴하기 전에 일일히 루프를 돌면서 delete 해줘야함
        //vetror가 파괴될때 내장하고 있는 모든 객체를 파괴할 수는 없을까?
        //VCL 에서는 TObjectList 클래스를 제공한다! 그러나 이는 C++ 표준이 아니다.
        //게다가 Templete Class 가 아니라 Casting 을 추가로 해줘야 한다는 부담도있다
    }
    cout << "Vector 에 있는 10개를 파괴" << endl;
    for(int i = 10 - 1;i >= 0;--i)
    {
        delete v2[i];
    }

    cout << "shared_ptr 을 이용하여 넣는다" << endl;
    vector<shared_ptr<Test> > v3;
    for(int i=0;i<10;++i)
    {
        shared_ptr<Test> spt(new Test);
        v3.push_back(spt);
    //vector 인 v3 역시 Main이 끝나야 파괴됨.
    //v3이  파괴되기 전 shared_ptr 의 효과에 의해 v3 이 가지고있던 Test가 모두 파괴
    }

    cout << "벡터 자체를 동적으로 생성해서 테스트 해 보자" << endl;
    vector<shared_ptr<Test> > *v4 = new vector<shared_ptr<Test> >;
    for(int i=0;i<10;++i)
    {
        shared_ptr<Test> spt(new Test);
        v4->push_back(spt);
    }
    cout << "벡터를 박살내면 가지고 있던 Test 10개도 다 박살난다" << endl;
    delete v4;

    system("pause"); //이게 끝나야 Main 이 끝나므로 t1은 이 뒤에 파괴
    //vector 인 v3 역시 Main이 끝나야 파괴됨.
    //v3이  파괴되기 전 shared_ptr 의 효과에 의해 v3 이 가지고있던 Test가 모두 파괴
}
//---------------------------------------------------------------------------

/*
Ps. CopyConstructor 가 10번이 아닌 그 이상 실행 되는데.. 그 이유는 Vector 가 공간이 부족해서 재할당을 하면서 다시 복사생성자가 호출되기 때문입니다. 생각보다 오버헤드가 많이큽니다.
*/
?

List of Articles
번호 제목 글쓴이 날짜 조회 수
157 현재 MSDN Download Page file Lyn 2013.09.23 19526
156 폰트 TTF와 OTF 그 역사의 아이러니함. Lyn 2015.06.30 2817
155 특정 Thread가 Wait계열 함수에 의해 Block 중인지 확인하기 file Lyn 2012.06.28 27210
» 컨테이너가 파괴될 때 소유한 객체 자동으로 파괴하기 Lyn 2008.10.22 36762
153 잠시후 한국시각 21일 0시부터 VS 2015 런칭행사를 합니다. Lyn 2015.07.21 2262
152 웹 개발 문서가 MDN으로 통합 Lyn 2017.12.05 689
151 요즘 공부를 안하니 쓸게 없네요 Lyn 2018.06.02 546
150 외주도 안하고 공부도 안하니 이 서버가 무용지물이 되어가고 있군요 Lyn 2018.09.18 765
149 왜 MemberFunction Pointer 를 cout 으로 출력하면 1이 나올까 Lyn 2017.03.27 1676
148 오랫만에 인증서 업데이트와 서버 이전 Lyn 2018.07.07 477
147 오랫만에 서버 업데이트... 인데 Lyn 2015.03.03 5758
146 프로그래밍 대회 알고리즘 파트 문제 2 secret Lyn 2008.11.22 15485
145 심심해서 만들어본 폰 요금 계산기 Lyn 2019.08.18 186
144 서버를 이전했습니다. Lyn 2014.08.19 28711
143 서버를 Windows 2012 R2로 교체 하였습니다. 1 Lyn 2013.09.29 22082
142 새해복 많이받으세요 Lyn 2019.02.05 289
141 새해다 ... Lyn 2012.01.01 28080
140 사이트에서 http2 프로토콜을 지원 하기 시작 했습니다. Lyn 2016.10.01 4319
139 사이트에 SSL 인증서를 적용 했습니다... 적용 방법 Lyn 2016.09.07 2071
138 사용중인 FireFox 플러그인. Lyn 2010.05.18 42342
Board Pagination Prev 1 2 3 4 5 6 7 ... 8 Next
/ 8