BlackMark
Lt. Commander
- Registriert
- Juni 2007
- Beiträge
- 1.346
Ganz genau. Das ist absolut nicht wie man so etwas implementieren darf. Diesernew Account() schrieb:Wenn ja, könnte da das Problem liegen: Im Code hat der Copy Operator move semantics implementiert. Weird und gefährlich imho. Das würde afaik nämlich DataXYZ ungültig machen ohne std::move zu nutzen.
DataXYZ
Typ und alles andere das auf DataPointer
aufbaut ist absolut schrecklich. Man muss es moven, weil wenn eine Kopie out-of-scope geht, werden alle anderen Kopien ungültig (aber auch nur, wenn der destructor von m_private_impl
auch den m_pointer
freed, ansonsten leaked hier alles).Das passt schon so.new Account() schrieb:C++:inline void shallowCopy(const DataPointer& other) { if(m_private_impl != 0) delete m_private_impl; //// Wieso? wird dadurch nicht der Speicher gelöscht, sodass er auch in der Kopie nicht mehr verfügbar ist? m_pointer = other.m_pointer; m_size = other.m_size; m_private_impl = other.m_private_impl; }
delete m_private_impl
stellt sicher, dass der alte Wert vom Empfänger der Kopie gelöscht wird. Es wird ja nicht delete other.m_private_impl
aufgerufen, das wäre ein Problem.Gruß
BlackMark