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 가 공간이 부족해서 재할당을 하면서 다시 복사생성자가 호출되기 때문입니다. 생각보다 오버헤드가 많이큽니다.
*/
?

  1. [개인자료] 윈도우 재설치 후 설치 하는 프로그램

    Date2010.01.03 ByLyn Views39056
    Read More
  2. Compare, Merge 툴 간의 비교. - 작성중

    Date2009.12.08 ByLyn Views40838
    Read More
  3. C++ new 연산자의 진실

    Date2009.08.19 ByLyn Views57884
    Read More
  4. [Boost 살펴보기] 8. Tokenizer

    Date2009.06.11 ByLyn Views42697
    Read More
  5. [Boost 살펴보기] 7. String Algorithm2

    Date2009.05.20 ByLyn Views42099
    Read More
  6. [Boost 살펴보기] 6. String Algorithm1

    Date2009.05.12 ByLyn Views41653
    Read More
  7. [Boost 살펴보기] 5. lexical_cast

    Date2009.05.12 ByLyn Views41398
    Read More
  8. [Boost 살펴보기] 4. multi_array

    Date2009.05.11 ByLyn Views36736
    Read More
  9. [Boost 살펴보기] 3. timer

    Date2009.05.11 ByLyn Views44207
    Read More
  10. [Boost 살펴보기] 2. any

    Date2009.05.11 ByLyn Views36714
    Read More
  11. [Boost 살펴보기] 1. pool

    Date2009.05.11 ByLyn Views37093
    Read More
  12. 프로그래밍 대회 알고리즘 파트 문제

    Date2008.11.22 ByLyn Views15485
    Read More
  13. 컨테이너가 파괴될 때 소유한 객체 자동으로 파괴하기

    Date2008.10.22 ByLyn Views36762
    Read More
  14. [TR1 살펴보기] 3. UnOrdered Containers

    Date2008.10.05 ByLyn Views35647
    Read More
  15. [TR1 살펴보기] 2. Array

    Date2008.10.05 ByLyn Views37566
    Read More
  16. [TR1 살펴보기] 1. Random

    Date2008.10.05 ByLyn Views38351
    Read More
  17. Delphi 2009 Generic 살펴보기

    Date2008.09.29 ByLyn Views38835
    Read More
Board Pagination Prev 1 ... 3 4 5 6 7 8 Next
/ 8