2016-12-11 2 views
0

Ich habe eine Reihe von nicht verwandten Strukturen, die ich zu einer Std :: Warteschlange hinzufügen möchte. Ich benutze eine Struktur namens message, die ich verwende, um die nicht verwandten Strukturen zu kapseln, um sie in derselben Warteschlange zu speichern.Fügt ein Verweis auf std :: queue eine Kopie hinzu?

struct message { 
    char *struct_pointer; 
    size_t struct_size; 
}; 

struct confirmer { 
    int32_t hello; 
    int32_t yellow; 
    double jello; 
} 

Innerhalb einer Nachricht, ich rufe dann

confirmer *confirm = new confirmer(); 
confirmer->hello = 100; 
confirmer->yellow = 000; 
confirmer->jello = 123.324; 

message my_message = {(char *)confirm, sizeof(struct confirmer)};  
other_namespace::do_things_to_message(my_message); 

wo do_things_to_message zu einem struct message in einer Referenz nimmt.

Meine Frage ist, dass innerhalb der Funktion do_things_to_message, wenn ich die Parameter curr_message hinzufügen (das ist eine Referenz) auf ein std::container, wird es eine Kopie der Referenz erzeugen und dass in dem Behälter gespeichert werden? I.e.

void do_things_to_message(struct message& curr_message) { 
    my_queue.push(curr_message) //where my_queue is a std::queue my_queue<message> 
    //do other things... 
    } 

Also was ist my_queue tatsächlich speichern? Eine Kopie des Objekts? Das ursprüngliche Objekt? Etwas anderes?

+3

Sie brauchen nicht den ganzen Code, um diese Frage zu stellen. Ein einfaches 'struct Foo {};' hätte getan. – juanchopanza

+3

Die Deklaration von 'my_queue' sagt Ihnen, was es speichert. – melpomene

+0

@melpomene also eine Kopie? Es tut mir leid, es ist nicht sehr klar für mich – user2635088

Antwort

-1

Eine Referenzvariable ist eine Referenz auf das ursprüngliche Objekt. Wenn Sie es in der Funktion hinzufügen, speichert es das ursprüngliche Objekt.

+0

Wenn Sie die Referenz zu einem std :: container hinzufügen, wird eine Kopie ** des übergebenen Arguments hinzugefügt. –

Verwandte Themen