Mi piacerebbe racchiudere un membro puntatore grezzo in un puntatore intelligente per impedire l'eliminazione all'interno di una classe di sviluppo. Il proprietario dell'oggetto sotto il puntatore è al di fuori della classe. Quindi, l'aspetto boost::shared_ptr
e std::auto_ptr
non si adatta. Di seguito è riportato un esempio ridotto:Creazione di weak_ptr <> dal puntatore raw
class Foo {
boost::weak_ptr<Bar> m_bar;
public:
void setBar(const Bar *bar) { // bar created on heap
m_bar = bar; // naturally compilation error
}
};
Ovviamente, induce errore di compilazione. Qual è un modo corretto per inizializzare weak_ptr
da un puntatore raw (se esistente)?
possibile duplicato del [condiviso \ _ptr & debole \ _ptr conversioni] (http://stackoverflow.com/questions/17522020/shared-ptr-weak-ptr-conversions) –
Se si desidera impedire la cancellazione di quel puntatore all'interno della classe, non chiamare 'delete' su di esso, e non fornire funzioni di accesso che espongono il puntatore ai client. 'weak_ptr' è pensato per la vista non proprietaria di un oggetto di proprietà di' shared_ptr'. Se tu fossi in grado di inserire quel puntatore in un 'weak_ptr', non avrebbe idea se il puntatore è scaduto, né mi impedisce di chiamare' delete m_bar.lock(). Get(); 'all'interno della classe. Non puoi mai rendere tutto al 100% a prova di idiota. – Praetorian