Kann ich verhindern, dass Objekte von std :: memcpy kopiert werden?

8

Es ist einfach, eine nicht kopierbare Klasse mit Konstruktor- und Zuweisungsoperator für private Kopien, boost::noncopyable oder C ++ 11 delete , zu erstellen:

%Vor%

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:

%Vor%

Gibt es eine Methode, um vollständig zu verhindern, dass eine Instanz Byte für Byte kopiert wird?

    
Nykakin 20.04.2015, 21:52
quelle

2 Antworten

8
  

Kann ich verhindern, dass Objekte von std::memcpy kopiert werden?

Die einfache Antwort ist "Nein".

    
R Sahu 20.04.2015, 22:08
quelle
0

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

enthält %Vor%

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.

    
user877329 11.05.2015 09:39
quelle

Tags und Links