C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[487] 스마트 포인터 동작이해입니다.
nicekr [mpbox] 7354 읽음    2005-08-10 23:49
혹시나 하는 마음에 또 올립니다 ^^'''

역시.. 스마트 포인터가 마법(?)은 아니니까요^^

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

#include <vcl.h>

#include <stdio.h>
#include <iostream.h>

#pragma hdrstop

#define BOOST_THREAD_USE_LIB

#include <boost/thread/thread.hpp>
#include <boost/scoped_ptr.hpp>
#include <boost/shared_ptr.hpp>

using boost::thread;
using boost::scoped_ptr;
using boost::shared_ptr;

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

#pragma argsused

class TZMy
{
public:
    explicit TZMy(const AnsiString& filename) {};

    void sayMe() { printf("I'm TZMy\n"); }
};

class TZAbThread
{
public:
    TZAbThread( boost::shared_ptr<TZMy> p )
    {
        m_p = p;

        printf("thread: %d\n", m_p.use_count());
    }

    TZAbThread( TZMy* p )
    {
        m_op = p;

        printf("thread: %d\n", m_p.use_count());
    }

    void operator() ()
    {
        while( true )
        {
            static int i = 0;

            i++;
            printf("%d> %d, use count %d\n", GetCurrentThreadId(), i, m_p.use_count());

            Sleep(100);

            if( i == 20 ) break;
        }
    }

private:
    boost::shared_ptr<TZMy> m_p;
    TZMy* m_op;
};

boost::shared_ptr<TZMy> createMy()
{
    boost::shared_ptr<TZMy> sp( new TZMy("Hello") );

    cout << "first " << sp.use_count() << endl;

    return sp;
}

TZMy* createMy2()
{
    boost::shared_ptr<TZMy> sp( new TZMy("Hello") );

    cout << "first " << sp.use_count() << endl;

    return sp.get();
}

int main(int argc, char* argv[])
{
    //boost::shared_ptr<TZMy> sp( new TZMy("Hello") );
    boost::shared_ptr<TZMy> sp = createMy();

    sp->sayMe();

    printf("main1: use count %d\n", sp.use_count());

    boost::shared_ptr<boost::thread> myThread( new boost::thread(TZAbThread(sp)) );
    //boost::shared_ptr<boost::thread> myThread2( new boost::thread(TZAbThread(sp)) );
    boost::shared_ptr<boost::thread> myThread2( new boost::thread(TZAbThread(sp.get())) );

    printf("main2: use count %d\n", sp.use_count());

    myThread->join();
    myThread2->join();

    system("pause");

    return 0;
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
487 스마트 포인터 동작이해입니다. nicekr 7354 2005/08/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.