2016-04-05 2 views
1

Ich weiß, dass wir memcpy() nicht verwenden können, weil es das Programm zum Absturz bringen kann.Was ist der beste Weg, um eine C++ - Struktur zu kopieren, die STL-Member wie Vektor enthält?

Dies ist die Struktur, die ich kopieren möchte. Was ist der beste Weg, dies zu tun?

#pragma pack (push, 1) 
typedef struct tagTEST_INFO 
{ 
    char  szCountryCode[100]; 
    char  szOpFlag[100]; 
    string strOrginName; 
    vector<RESP_INFO> vctInfo; 
    vector<RESP_HCR_INFO> vctHcrInfo; 

} TEST_INFO, *P_TEST_INFO; 
#pragma pack (pop) 
+2

Schnelle Frage ... Warum setzen Sie Byte-Packen, wenn Sie Nicht-POD-Typen drin haben? – Joe

+0

Es ist nur eine Demo-Struktur und meine ursprüngliche Struktur haben Mitglieder wie Int, Float usw. – DevMJ

+1

Sie sollten etwas demonstrieren, das Sinn macht. Vorzugsweise dein tatsächlicher [MCVE]. –

Antwort

0

Für alle Ihre Mitglieder sind Zuweisungsoperatoren definiert, was bedeutet, dass der integrierte Zuweisungsoperator problemlos kopiert werden kann. Es wird eine Memberwise-Kopie erstellt, die wiederum den Zuweisungsoperator der Mitglieder aufruft. Sie müssen keinen eigenen Kopierzuweisungsoperator definieren.

+0

OP scheint zu serialisieren. –

+0

Ich kann etwas über Serialisierung nicht lesen. Die Frage ist "beste Art zu kopieren". – Klaus

+0

Ja Frage ist der beste Weg zu kopieren .... – DevMJ

1

Die beste Sache ausgestattet, um den Code zu schreiben, um Ihre Kopie durchzuführen, ist der Compiler. Aber es braucht deine Hilfe.

Wenn RESP_INFO und RESP_HCR_INFO trivial kopierbar sind, generiert der Compiler automatisch geeignete Kopierkonstruktoren und Zuweisungsoperatoren.

Lassen Sie auch die C-style typedef Idiom - es ist nicht notwendig in C++. Und ist diese nicht-portable Verpackungsrichtlinie wirklich benötigt? Lassen Sie den Compiler den besten Weg herausfinden. Die std::string Klasse wäre wahrscheinlich ein besserer Typ für szCountryCode und szOpFlag.

+1

Vektoren sind trivial kopierbar jetzt? –

+0

Ja das war ein bisschen unartig. – Bathsheba

+1

Warum müssen Sie die Arrays in 'std :: string' umwandeln? Die Compiler-Standardkopie wird sie gut behandeln. –

Verwandte Themen