#include #include "boost/shared_ptr.hpp" #include "boost/weak_ptr.hpp" class A; class B; typedef boost::shared_ptr AStrongPtr; //typedef boost::weak_ptr AWeakPtr; typedef boost::shared_ptr BStrongPtr; //typedef boost::weak_ptr BWeakPtr; class ABlink; typedef boost::shared_ptr ABlinkStrongPtr; typedef boost::weak_ptr ABlinkWeakPtr; class A { public: A() { std::cout << "Ctor A<"<" << std::endl;} virtual ~A() { std::cout << "Dtor A<"<" << std::endl;} }; class B { public: B() { std::cout << "Ctor B<"<" << std::endl;} virtual ~B() { std::cout << "Dtor B<"<" << std::endl;} }; class ABlink { public: void setB(const BStrongPtr& aB) {a = aB;} BStrongPtr& getB() { std::cout << "Use non-const getB" << std::endl; return a; } const BStrongPtr& getB() const { std::cout << "Use const getB" << std::endl; return b; } void setA(const AStrongPtr& aA) {a = aA;} AStrongPtr& getA() { std::cout << "Use non-const getA" << std::endl; return a; } const AStrongPtr& getA() const { std::cout << "Use const getA" << std::endl; return a; } private: AStrongPtr a; BStrongPtr b; }; int main() { std::cout << "Create A & B" << std::endl; AStrongPtr aA(new A); BStrongPtr aB(new B); std::cout << "Make the association A <-> B" << std::endl; ABlinkStrongPtr abLink(new ABlink); abLink->setA(aA); abLink->setB(aB); std::cout << "return" << std::endl; return 0; }