ho notato che se ho il seguente:Utilizzando unique_ptr come un parametro di metodo - Pro e contro
#include <memory>
using namespace std;
class Foo
{
public:
Foo();
};
class Wobble
{
public:
void SetWibble(unique_ptr<Foo> foo)
{
this->wibble = move(foo);
}
// I like returning a ref as it gives control to
// the user of my framework over recieving a & or a copy
Foo& GetWibble()
{
return *wibble;
}
unique_ptr<Foo> wibble;
};
int _tmain(int argc, _TCHAR* argv[])
{
unique_ptr<Wobble> wobble;
unique_ptr<Foo> foo(new Foo()); // Look here
foo->something = ...;
foo->something1 = ...;
foo->something2 = ...;
wobble->SetWibble(move(foo));
return 0;
}
... quando dichiaro foo
, ho un oggetto piacevole Foo
.. e quando ho move
sua proprietà nell'istanza wobble
, foo è ora vuoto nell'ambito int _tmain
.
Ho molto apprezzato questo come ho pensato che stava rimuovendo la memoria e di compensazione il puntatore dal int _tmain
ambito ... che nel mio contesto attuale non dovrebbe essere necessario giocherellava con qualsiasi altro ... Al contrario di questo:
// ...
void SetWibble(Foo& foo)
{
this->wibble = foo;
}
// ...
int _tmain(int argc, _TCHAR* argv[])
{
unique_ptr<Wobble> wobble;
Foo foo;
foo.something = ...;
foo.something1 = ...;
foo.something2 = ...;
wobble->SetWibble(foo);
return 0;
}
Che conserva ancora un riferimento a tale variabile all'interno dell'ambito.
D:
- è quello che ho detto sopra è corretto?
- Mi chiedo se ci sono dei vantaggi sull'uso di unique_ptr e non sull'uso di unique_ptr qui oltre a quelli che ho indicato?
si sarebbe probabilmente trovare questo interessante: http://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-parameters/ – Galik
mi accingo a leggere questo correttamente questa volta, mi penso di essere stato indirizzato al suo prima ... – Jimmyt1988
Dimentichi che in un caso stai usando l'heap e nell'altro lo stack, la scelta dipende dall'applicazione. – dlavila