000
11.07.2006, 16:16 Uhr
zubrowa
|
Hallo,
ich habe eine Beispielklasse mit einem Copy-Konstruktor und einem Zuweisungsoperator. Sind die Konstrukte Eurer Meinung nach in Ordnung oder habt Ihr irgendwelche Kommentare/Verbesserungsvorschläge?
C++: |
#include <map> #include <list> #include <string>
class C {}; class B {};
class A : public C {
public: A(); ~A(); A( const A& ); A& operator=( const A& );
private: struct str_type { int a; int b; int *c; } mStruct;
std::map< std::string, int > mMap;
std::list< int > mList;
std::map< int, B* > mMap2;
static int mS; const int mC; B *mB; // Pointer to another class };
// Copy constructor A::A( const A& a ) : mStruct( a.mStruct ), mMap( a.mMap ), mList( a.mList ), mMap2( a.mMap2 ), mC( a.mC ), mB( new B( *a.mB ) ) { for (std::map< int, B* >::const_iterator it( a.mMap2.begin() ); it != a.mMap2.end(); ++it ) mMap2.insert( std::make_pair( it->first, new B( *(it->second) ) ) ); };
// Assignment operator A& A::operator=( const A& a ) { if ( this != &a ) { B* bakB = 0; try { bakB = new B( *a.mB ); } catch( ... ) { delete bakB; throw; } C::operator=( a ); delete mB; mB = bakB; mStruct = a.mStruct;
mMap = a.mMap;
mList = a.mList;
mMap2.clear(); for (std::map< int, B* >::const_iterator it( a.mMap2.begin() ); it != a.mMap2.end(); ++it ) mMap2.insert( std::make_pair( it->first, new B( *(it->second) ) ) );
mS = a.mS; } return *this; };
|
Gruß, Christian
Bearbeitung von ao: |
Ein Satz cpp-Tags zum Angewöhnen
|
Dieser Post wurde am 12.07.2006 um 09:08 Uhr von ao editiert. |