2015-08-17 9 views

risposta

7

No non è possibile, è necessario definire il proprio costruttore per essere in grado di farlo.

#include <iostream> 
#include <memory> 
#include <string> 

struct S 
{ 
    S(int ii, double dd) 
    : i(ii) 
    , d(dd) 
    { } 
    int i; 
    double d; 
}; 

int main() 
{ 
// S s{1, 2.1}; 
    auto s = std::make_shared<S>(1, 2.1); 
    //or without constructor, you have to create manually a temporary 
    auto s1 = std::make_shared<S>(S{1, 2.1}); 

} 
+0

Ho fatto il secondo e ho capito come funziona se devo passare i parametri del costruttore. Perché passo un oggetto e funziona? – Narek

+1

Quando si passa un oggetto, si richiama il costruttore della copia della struttura. – Wyzard

+1

firma di make condivisa è: make_shared (_Args && ... __args) Nel secondo caso i tuoi argomenti sono un oggetto completo e quando viene inoltrato chiama il costruttore di copia dell'oggetto, risultando in una nuova S ben costruita, S –

Problemi correlati