shared_ptr< ArchiveManager > manager ( new ArchiveManager );shared_ptr< Archive > archive ( new Archive( manager , "name" ) );shared_ptr< ArchiveFile > file ( new ArchiveFile( archive , "filename" ) );
Which is as simple as:
class ArchiveManager {};class Archive { shared_ptr< ArchiveManager > parent;public: Archive( const shared_ptr< ArchiveManager > & parent , const std::string & name ) : parent( parent ) { //do whatever we want with main, if anything }};class ArchiveFile { shared_ptr< Archive > parent;public: Archive( const shared_ptr< Archive > & parent , const std::string & file ) : parent( parent ) { //do whatever we want with file, ask parent to load it for us, whatever. }};
Simple, concise, logical - not like that "give me a reference to initialize" bolderdash :-p.