|
Boost Users : |
From: Elisabeth Benoit (elisabeth.benoit_at_[hidden])
Date: 2006-07-10 11:00:17
here is my complete test program.
// TestMemBis.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "CloneAppRecipe.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
int main()
{
CloneAppRecipe t;
// cree un leak
t.connectPtrTestMem();
getchar();
return 0;
}
// CloneAppRecipe.h: interface for the CloneAppRecipe class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_CLONEAPPREC__INCLUDED_)
#define AFX_CLONEAPPREC__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "TestMem.h"
class CloneAppRecipe
{
public:
CloneAppRecipe();
~CloneAppRecipe();
private:
// desactive constructeur copie et operateur=
CloneAppRecipe( const CloneAppRecipe& rhs );
CloneAppRecipe& operator=( const CloneAppRecipe& rhs );
// slot pour connecter
void test() const;
public:
void connectPtrTestMem();
boost::shared_ptr<TestMem> m_ptrTestMem;
};
#endif
// CloneAppRecipe.cpp: implementation of the CloneAppRecipe class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CloneAppRecipe.h"
#include "TestTab.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CloneAppRecipe::CloneAppRecipe() : m_ptrTestMem( new TestMem() )
{
}
CloneAppRecipe::~CloneAppRecipe()
{
}
void CloneAppRecipe::test() const
{
}
void CloneAppRecipe::connectPtrTestMem()
{
m_ptrTestMem->ConnectSignal(boost::bind(&CloneAppRecipe::test, this));
}
// TestMem.h: interface for the TestMem class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_TESTMEM__INCLUDED_)
#define AFX_TESTMEM__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class TestTab;
class TestMem
{
public:
typedef boost::signal0<void> TypeSignalTest;
TestMem();
~TestMem();
void ConnectSignal(const TypeSignalTest::slot_type& slot) const;
private:
// desactive constructeur copie et operateur=
TestMem( const TestMem& rhs );
TestMem& operator=( const TestMem& rhs );
boost::shared_ptr<TestTab> m_ptrTestTab1;
boost::shared_ptr<TestTab> m_ptrTestTab2;
boost::shared_ptr<TestTab> m_ptrTestTab3;
};
#endif //
!defined(AFX_VISIONPARAMTABMANAGER_H__F0F26B98_D7D0_489E_AD5F_0DDEBF9A2D4F__INCLUDED_)
// TestMem.cpp: implementation of the TestMem class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "TestMem.h"
#include "TestTab.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
TestMem::TestMem()
: m_ptrTestTab1( new TestTab() ),
m_ptrTestTab2( new TestTab() ),
m_ptrTestTab3( new TestTab() )
{
}
TestMem::~TestMem()
{
}
void TestMem::ConnectSignal(const TypeSignalTest::slot_type& slot) const
{
m_ptrTestTab1->ConnectSignal(slot);
m_ptrTestTab2->ConnectSignal(slot);
m_ptrTestTab3->ConnectSignal(slot);
}
// VisionParamGenericTab.h: interface for the CVisionParamGenericTab class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_TEST_TAB)
#define AFX_TEST_TAB
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
typedef boost::signal0<void> TypeSignalTest;
class TestTab
{
public:
TestTab();
~TestTab();
void ConnectSignal(const TypeSignalTest::slot_type& slot);
private:
// desactive constructeur copie
TestTab( const TestTab& rhs );
TestTab& operator=( const TestTab& rhs );
TypeSignalTest m_SignalTest;
};
#endif
// TestTab.cpp: implementation of the TestTab class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "TestTab.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
TestTab::TestTab()
{
}
TestTab::~TestTab()
{
m_SignalTest.disconnect_all_slots();
}
void TestTab::ConnectSignal(const TypeSignalTest::slot_type& slot)
{
m_SignalTest.connect(slot);
}
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__4BC26E01_A411_43B7_9129_B453770CBE84__INCLUDED_)
#define AFX_STDAFX_H__4BC26E01_A411_43B7_9129_B453770CBE84__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <stdio.h>
#include <afx.h>
#include "CloneGeneral.h"
#include "BoostIInclude.h"
#endif //
!defined(AFX_STDAFX_H__4BC26E01_A411_43B7_9129_B453770CBE84__INCLUDED_)
CloneGeneral.h
#define AFX_GENERAL_H__F3520E35_333F_11D5_A855_000103C25D02__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//#define for if (1) for // TODO_PASSAGE_6.0_8.0
#define BOOST_NO_INTRINSIC_WCHAR_T // requis parce que
BOOST_TT_AUX_BOOL_TRAIT_CV_SPEC1(is_integral,wchar_t,true)
// est défini 2 fois sinon et ca ne compile pas.
// disable auto-linking for Boost
#define BOOST_ALL_NO_LIB
#endif //
!defined(AFX_GENERAL_H__F3520E35_333F_11D5_A855_000103C25D02__INCLUDED_)
BoostIInclude.h
#if !defined(AFX_SVBOOSTBIND_H__F3520E35_333F_11D5_A855_000103C25D02__INCLUDED_)
#define AFX_SVBOOSTBIND_H__F3520E35_333F_11D5_A855_000103C25D02__INCLUDED_
#pragma warning(push,1)
#include "boost/bind.hpp"
#include "boost/signal.hpp"
#include "boost/shared_ptr.hpp"
#pragma warning(pop)
#ifdef _DEBUG
#pragma comment(lib, "libboost_signals-vc6-mt-gd.lib")
#else
#pragma comment(lib, "libboost_signals-vc6-mt.lib")
#endif
#endif //
!defined(AFX_SVBOOSTBIND_H__F3520E35_333F_11D5_A855_000103C25D02__INCLUDED_)
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net