2010-12-20 17 views
10

Supongamos que tengo clase comovalor por defecto para el impulso :: shared_ptr el constructor de la clase

class A{ 
    public: 
    A(int a, boost::shared_ptr<int> ptr){ 
     // whatever! 
    } 
}; 

Mi pregunta es, ¿cuál es el valor por defecto para que ptr? Me gustaría ser capaz de crear una instancia de esa clase mediante

A myA(5); 

Claro que sé que podría crear otro constructor con un solo parámetro, pero estoy buscando algo como

A(int a, boost::shared_ptr<int> ptr = WAT?) 

¿Es posible? Actualmente estoy usando la forma de dos constructores, pero sería genial hacerlo de esta manera.

Respuesta

11
#include <boost/make_shared.hpp> 

A(int a, boost::shared_ptr<int> ptr = boost::make_shared<int>()) 

Comprobar http://www.boost.org/doc/libs/1_43_0/libs/smart_ptr/make_shared.html

+0

Gracias por su respuesta. No intenté usar make_shared de esa manera, aunque lo estaba usando cuando llamaba a ese constructor desde otros lugares. Sin embargo, sería genial tener ese "ptr" en su valor predeterminado en lugar de darle un valor ficticio, porque no estoy usando exactamente un entero, sino una clase completa. –

+0

Puedes llamarlo sin el valor ficticio, solo estaba usando un ejemplo. – OneOfOne

3

Finalmente lo encontré here, puedo usar constructor predeterminado del puntero compartida como esto:

A(int a, boost::shared_ptr<int> ptr = boost::shared_ptr<int>()) 
Cuestiones relacionadas