2014-07-08 22 views
5

Mam problem polegający na tym, że chciałbym skopiować obiekt, ale nie chcę go kroić.Unikanie podziału obiektów C++

DerivedObj derivedObj; 
myFunc(derivedObj); 

void myFunc(MyObj &obj) 
{ 
    MyObj *saveForLater = new MyObj(obj); // slices my object 
    // ... // 
} 

Czy istnieje sposób na obejście tego? Muszę wykonać kopię, ponieważ oryginalny obiekt opuścił zakres, zanim będzie potrzebny.

+0

@ clcto jak to zrobi jakąkolwiek różnicę? –

+2

@clcto Przekazywanie wskaźnika w stosunku do odniesienia nie stanowi problemu. Wskaźniki * i * odniesienia NIE są pocięte na plasterki. Rozważ wskaźniki i odniesienia "nierozłączne". Krojenie odbywa się na wyciągu z poleceniem "new". –

+1

Z tego co wiem, masz dwie główne opcje, wirtualną metodę o nazwie 'clone()' lub możesz nadać własność 'obj' na' myFunc() ', być może używając' shared_ptr '. –

Odpowiedz

6

Jeśli ograniczenia na to pozwalają, możesz dodać wirtualną metodę Clone.

class MyObj 
{ 
     public: 
      virtual MyObj* Clone() const = 0; 
}; 

class DerivedObj : public MyObj 
{ 
     public: 
      virtual MyObj* Clone() const 
      { 
       return new DerivedObj(*this); 
      } 
}; 




void myFunc(MyObj &obj) 
{ 
     MyObj *saveForLater = obj.Clone(); 
     // ... // 
    } 
Powiązane problemy