Articles of smart pointers

Tipo de retorno Covariância com pointers inteligentes

Em C ++, podemos fazer isso: struct Base { virtual Base* Clone() const { … } virtual ~Base(){} }; struct Derived : Base { virtual Derived* Clone() const {…} //overrides Base::Clone }; No entanto, o seguinte não fará o mesmo truque: struct Base { virtual shared_ptr Clone() const { … } virtual ~Base(){} }; struct […]

Inicialização std :: shared_ptr: make_shared () vs shared_ptr (novo Foo)

Qual é a diferença entre: std::shared_ptr p = std::shared_ptr( new int ); e std::shared_ptr p = std::make_shared(); ? Qual deles devo preferir e por quê? PS Tenho certeza que isso já deve ter sido respondido, mas não consigo encontrar uma pergunta semelhante.

Onde é shared_ptr?

Estou tão frustrado agora, depois de várias horas tentando encontrar onde o shared_ptr está localizado. Nenhum dos exemplos que vejo mostram código completo para include os headers de shared_ptr (e funcionando). Simplesmente declarar std , tr1 e não está ajudando em nada! Eu tenho baixado impulsos e tudo, mas ainda não aparece! Alguém pode me […]

Como posso usar tipos de retorno covariantes com pointers inteligentes?

Eu tenho código assim: class RetInterface {…} class Ret1: public RetInterface {…} class AInterface { public: virtual boost::shared_ptr get_r() const = 0; … }; class A1: public AInterface { public: boost::shared_ptr get_r() const {…} … }; Este código não compila. No visual studio isso aumenta C2555: replace o tipo de retorno da function virtual é […]

Existe um equivalente não atômico de std :: shared_ptr? E porque não há um em ?

Esta é uma questão de duas partes, tudo sobre a atomicidade de std::shared_ptr : 1. Tanto quanto eu posso dizer, std::shared_ptr é o único ponteiro inteligente em que é atômico. Eu estou querendo saber se existe uma versão não-atômica de std::shared_ptr disponível (não consigo ver nada em , então também estou aberto a sugestões fora […]

pointers inteligentes e matrizes

Como os pointers inteligentes lidam com matrizes? Por exemplo, void function(void) { std::unique_ptr my_array(new int[5]); } Quando my_array sai do escopo e é destruído, toda a matriz de inteiros é re-reivindicada? Somente o primeiro elemento do array é recuperado? Ou há algo mais acontecendo (como comportamento indefinido)?

O Google pode Mockar um método com um tipo de retorno de ponteiro inteligente?

Eu tenho uma fábrica que retorna um ponteiro inteligente. Independentemente do ponteiro inteligente que eu uso, não consigo fazer o Google Mock zombar do método de fábrica. O object simulado é a implementação de uma interface abstrata pura onde todos os methods são virtuais. Eu tenho um protótipo: MOCK_METHOD0(Create, std::unique_ptr()); E eu recebo: “…gmock/gmock-spec-builders.h(1314): error […]

Quanto é a sobrecarga de pointers inteligentes em comparação com pointers normais em C ++?

Quanto é a sobrecarga de pointers inteligentes em comparação com pointers normais no C ++ 11? Em outras palavras, meu código será mais lento se eu usar pointers inteligentes e, em caso afirmativo, quanto mais lento? Especificamente, estou perguntando sobre o C ++ 11 std::shared_ptr e std::unique_ptr . Obviamente, o material empurrado para baixo da […]

Quando o std :: weak_ptr é útil?

Comecei a estudar os pointers inteligentes do C ++ 11 e não vejo nenhum uso útil de std::weak_ptr . Alguém pode me dizer quando std::weak_ptr é útil / necessário?

“Downcasting” unique_ptr para unique_ptr

Eu tenho uma série de fábricas que retornam unique_ptr . Sob o capô, no entanto, eles estão fornecendo pointers para vários tipos derivados, ou seja, unique_ptr , unique_ptr , unique_ptr etc. Dado DerivedA : Derived and Derived : Base , teríamos: unique_ptr DerivedAFactory() { return unique_ptr(new DerivedA); } O que eu preciso fazer é “converter” […]