Verwendung eines Vektors eindeutiger Zeiger in einer dll exportierten Klasse mit Visual Studio

8

Ein einfaches Beispiel

%Vor%

Fehler bei der VS2013-Kompilierung für den Konstruktor für gelöschte Kopien von unique_ptr . Wenn ich __declspec(dllexport) entferne, ist es in Ordnung. Wenn ich nur unique_ptr<int> v verwende, ist es auch in Ordnung. Ist das ein Compilerfehler? Irgendeine Möglichkeit um es zu umgehen? Danke.

Sie können es auf Ссылка mit dem folgenden vollständigen Code versuchen

%Vor%

liefert den Compilerfehler:

%Vor%     
user1899020 10.04.2015, 15:31
quelle

1 Antwort

10

Es scheint, dass das Hinzufügen von __declspec(dllexport) den Compiler zwingt, den implizit deklarierten Kopierkonstruktor und Kopierzuweisungsoperator zu definieren (normalerweise geschieht dies nur, wenn sie verwendet werden). Diese wiederum rufen den Kopierkonstruktor / Zuweisungsoperator von v auf. Aber die Kopieroperationen von std::vector<T> sind für eine nicht kopierbare T , wie zB std::unique_ptr , schlecht formatiert. Daher der Fehler.

Wenn das Mitglied nur std::unique_ptr ist, tritt das Problem nicht auf, da die Kopiervorgänge explizit gelöscht wurden und somit die Standardkopiervorgänge von A ebenfalls gelöscht werden.

Damit ist das Problem gelöst, wenn Sie die Kopiervorgänge explizit löschen:

%Vor%

Wenn Sie Funktionen kopieren möchten, können Sie sie natürlich auch selbst definieren.

    
Angew 10.04.2015, 15:44
quelle