2016-09-08 1 views
0

Oder muss ich std::make_unique in irgendwelche Formen überhaupt werfen?Wie std :: make_unique zu werfen, so dass ich die Funktionen in der Klasse deklariert verwenden kann?

Ich habe eine FOO Klasse mit einigen Funktionen, die ich verwenden kann:

FOO::FOO(const yoo &yoo, float numbers) : 
    num_to_execute(numbers) 
{ 
... 
... 
} 

void FOO::execute() 
{ 
    execute(num_to_execute); 
} 

In einem anderen CPP, meine angegebenen Codes foo initiierte der folgenden Methode:

new_foo = std::make_unique<FOO>(yoo, number); 

(bisher alles ist richtig). Was ich tun möchte ist, auf meinem new_foo auszuführen. Ich habe versucht, mit

new_foo.execute(); 

Aber es sagt:

error: 'class std::unique_ptr<WORK::TOBEDONE::FOO>' has no member named 'EXECUTE' 

execute sollte <WORK::TOBEDONE::FOO> auf Mitglied genannt Lage sein, aber die std :: unique_ptr gibt mir eine harte Zeit zu verstehen, was ich tun soll.

Antwort

3

new_foo->execute();

unique_ptr verhält sich wie ein normaler Zeiger in diesem Sinne und hat ein operator-> und operator * überlastete.

Sie verwenden, um einen regulären Punkt (.) unique_ptr Funktionen zugreifen (wie std::unique_ptr::get), während -> und * mit dem pointee zuzugreifen.

auto str = std::make_unique<std::string>("hello world"); 
auto i = std::make_unique<int>(5); 

str->size(); 
*i = 4; 
str.reset(); //deletes the pointee and make str point to null 
i.reset(); //as above 
Verwandte Themen