так что вы можете обратиться к нему позже.

прочтения в RAII, просмотраПрезентация Херба Саттера на CppCon2014и читаяосновные рекомендации а такжеСвязанный статьи в течение нескольких дней я все еще смущен собственностью и связанной с ней семантикой.

Допустим, класс A и класс B представляют физические объекты, и есть класс Scene и класс Process. Класс Process являетсяmain функция, если хотите. В реальном мире A может приобрести B и физически сохранить его для себя. Это может также выпустить это. Поэтому в течение экземпляра Process объект A должен иметь возможность иметь для себя экземпляр B, а также освобождать его после того, как с ним покончено. Как и Б живут в сцене, которой должен управлять процесс.

Также выводится B: A использует некоторый интерфейс, в то время как сцена использует некоторый другой интерфейс, предоставляемый B.

Давайте попробуем с некоторым кодом по крайней мере для процесса:

class Process
{
public:
  void run();
};

void Process::run()
{
  auto scn = Scene {};
  auto a = A {};
  auto b = B {};

  scn.add(a);  // stores a
  scn.add(b);  // stores b

  a.acquire(b);  // stores b, and represents physical possession of a B
  a.doSomething();
  a.release(b);  // sets a's B instance to null, and physically loses the B
}

Поправьте меня здесь, если я ошибаюсь, это сомнительная часть.

Из того, что я понимаю, A должен (а не как код) находиться в куче и указывать на shared_ptr, так как у Process и Scene есть свои собственные экземпляры A. То же самое произошло бы для B, который хранится как вa И вscn, и которыйявляется в процессе. Зачем тогдаscn не бытьmake_uniqueд?

Другой способ сделать это - поместить все в стек (как в фрагменте кода). Оба решения кажутся мне идентичными, я вообще не понимаю смысловой разницы этих двух вариантов, но я бы предпочел первый.

Ответы на вопрос(1)

Ваш ответ на вопрос