Advertisement
donkaban

Untitled

Dec 2nd, 2014
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. С/С++
  2.  
  3. Перегрузка оператора присваивания
  4. Пусть есть класс
  5. class Boo : public SuperBoo {
  6. Foo* fFoo1;
  7. Foo* fFoo2;
  8. // ...
  9. }
  10. Где Foo - мономорфный класс, а класс Boo владеет указателями fFoo1, fFoo2.
  11. Задача: перегрузить оператор присваивания для класса Boo.
  12.  
  13.  
  14. Я не понял семантического смысла задания. В зависимости от перевода слова “владение” видятся несколько вариантов.
  15.  
  16. 1. Самый правильный - не делать этого, сделать конструктор копирования и перегруженный оператор = - закрытыми. Да и не хранить сырые указатели.
  17.  
  18. 2. Если переводить “владение” как эксклюзивное владение - то нужен аналог std::auto_ptr или лучше uniq_pt, с инвалидацией источника копирования.
  19.  
  20. 3. Глубокое копирование, как реализация перевода “владения” как независимого владения - проблема в том, что оно должно быть поддержано в Foo, если в Foo туе метода типа clone - то в приведенном случае я общего решения не вижу.
  21.  
  22. 4. Владение, переведенное как “совместное владение” требует доступа к деструкторам выше по иерархии, считать ссылки и хранить их вне класса, на куче.
  23.  
  24.  
  25. Любой из 4 вариантов я готов реализовывать, если вы поясните лингвистический смысл задания.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement