ropriedade com uma representação físi
Depois de ler em RAII, visualizarpresentação do CppCon2014 de Herb Sutter e lendo ocore guidelines e related articles ao longo de alguns dias, ainda estou bastante confuso sobre propriedade e semântica relacionad
Digamos que as classes A e B representem entidades físicas, e há uma classe Scene e uma classe Process. A classe Process é ummain
função, se quiser. No mundo real, um A pode adquirir um B e mantê-lo fisicamente para si. Também pode liberá-lo. Durante o curso de uma instância de Processo, um objeto A deve, portanto, ser capaz de ter para si uma instância B, e também liberá-lo após o término. As e Bs vivem em uma cena, que um processo deve gerencia
Também é derivado: um A usa alguma interface, enquanto uma Cena usa outra interface que um B. fornec
Vamos tentar com algum código para pelo menos o processo:
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
}
Corrija-me aqui se estiver errado, esta é a parte duvidos
Pelo que entendi, A deve (em vez de gostar do código) estar na pilha e apontado de um shared_ptr, pois o Processo e a Cena têm sua própria instância de A. O mesmo aconteceria com B, que é armazenado ambos ema
e emscn
, e qual em processo. Por que entãoscn
não sejamake_unique
d?
A outra maneira de fazer isso é ter tudo na pilha (como no trecho de código). Ambas as soluções parecem idênticas para mim, não entendo a diferença semântica dessas duas opções, mas tenderia à primeir