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