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% 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.
Tags und Links c++ visual-studio c++11 visual-studio-2013