Re[15]: Unified Pointer Library
От: so5team https://stiffstream.com
Дата: 18.06.18 13:05
Оценка:
Здравствуйте, ViTech, Вы писали:

S>>Ведь у вас Engine останется жив до тех пор, пока в Monitor не умрет string-ссылка на Engine. А это есть ни что иное, как влияние на время жизни, т.е. то самое совместное владение, наличие которого вы никак не можете признать.


VT>Фокус в том, что именно такое поведение мне и нужно.


Фокус в том, что именно такое поведение вам и дает shared_ptr. И нет надобности в изобретении его аналогов с вводящими в заблуждение именами.

Если вы так уж хотите иметь именно "владеющий указатель", а не голый shared_ptr, то нет ничего сложного в создании обертки:
class UniqueEngine {
  std::shared_ptr<Engine> engine_;
public:
  UniqueEngine(const UniqueEngine &) = disable;
  UniqueEngine(UniqueEngine &&) = default;
  UniqueEngine(std::unique_ptr<Engine> en) : engine_(std::move(en)) {}
  ...
  std::weak_ptr<Engine> weak_ref() { return {engine_}; }
  ...
};
...
class Car {
  UniqueEngine engine_;
  ...
public:
  auto engine() { return engine_.weak_ref(); }
};
class Monitor {
  std::weak_ptr<Engine> engine_;
  ...
};

Но и это уже оверинжениринг какой-то.

Может вам вообще нужно просто что-то вроде:
class Car : public std::enable_shared_from_this {
  Engine engine_;
public:
  std::weak_ptr<Engine> engine() {
    return { std::shared_ptr<Engine>(shared_from_this(), &engine) };
  };
};


VT>Да, я хочу писать программы в соответствии с моделями UML.


Пишите. Только сперва разберитесь каким естественным образом понятия из UML ложатся на C++, а не придумывайте велосипеды.

VT>Если вам хватает функциональности std::shared_ptr, и не нужны всякие псевдоконцепции, то и ладно


Не видно объективных причин для того, чтобы придумывать еще что-то сверх того. И вы не можете привести убедительных доводов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.