Es ist einfach, eine nicht kopierbare Klasse mit Konstruktor- und Zuweisungsoperator für private Kopien, boost::noncopyable
oder C ++ 11 delete
, zu erstellen:
Dies verhindert jedoch nicht, dass der Gegenstand tief als ein Paket von Bytes kopiert wird:
%Vor% Auch wenn Sie versuchen, dies zu verhindern, indem Sie operator&
private deklarieren, ist es dennoch möglich, Kopien mit Implementierungen von address-of idiom zu erstellen:
Gibt es eine Methode, um vollständig zu verhindern, dass eine Instanz Byte für Byte kopiert wird?
Dies ist nicht kugelsicher, aber Sie können Ihre eigene memcpy_safe
implementieren, die sich ähnlich verhält, aber etwas anderes akzeptiert als void*
. Dann erstellen Sie eine Include-Datei, die
Sagen Sie den Leuten, dass sie stattdessen diese Include-Datei verwenden sollen. Es wird die Deklaration von memcpy
ausgeblendet und alle Aufrufe von memcpy
durch Aufrufe von memcpy_safe
ersetzt. Die neue Funktion muss in einer eigenen Übersetzungseinheit implementiert werden, so dass Sie die alte memcpy
aufrufen können.