
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_)