Ik heb een 3th party library die functies bevat als deze:
Om geheugenlekken te voorkomen heb ik een wrapper template geschreven:
Altijd als een referentie nodig is (en het object dus word overschreven) wordt het ding eerst gereleased.
Probleem is, het werkt niet. In alle gevallen wordt 'operator TYPE&()' aangeroepen, ook als 'operator TYPE()' nodig is. Het toevoegen van een 'operator TYPE() const' werkt ook niet.
Het vervangen van 'operator TYPE&()' door 'operator TYPE*()' en dan functie aanroepen als 'CopyObject( obj1, *obj2 )' werkt wel, alleen ben je dan de cleane automaat weer kwijt.
Zit ik nou tegen een compilerbug aan te kijken? (VS2010), of is dit te verwachten gedrag?
C++:
Voor elke Create of Copy moet Release aangeroepen worden op het gealloceerde object. Er zijn meer typen dan alleen OBJECT, maar ze zijn in feite allemaal void pointers.1
2
3
4
5
| typedef void *OBJECT; CreateObject( OBJECT &out ); CopyObject( OBJECT in, OBJECT &out ); ReleaseObject( OBJECT in ); |
Om geheugenlekken te voorkomen heb ik een wrapper template geschreven:
C++:
Alle plekken waar een 'OBJECT object' staat is dat vervangen door een 'Object<OBJECT> object' . 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| template<typename TYPE> class Object { TYPE m_Object; public: Object(): m_Object( 0 ) {} ~Object() { Release(); } void Release() { if( m_Object ) ReleaseObject( m_Object ); m_Object = 0; } operator TYPE() { return m_Type; } operator TYPE &() { Release(); return m_Type; } }; |
Altijd als een referentie nodig is (en het object dus word overschreven) wordt het ding eerst gereleased.
Probleem is, het werkt niet. In alle gevallen wordt 'operator TYPE&()' aangeroepen, ook als 'operator TYPE()' nodig is. Het toevoegen van een 'operator TYPE() const' werkt ook niet.
Het vervangen van 'operator TYPE&()' door 'operator TYPE*()' en dan functie aanroepen als 'CopyObject( obj1, *obj2 )' werkt wel, alleen ben je dan de cleane automaat weer kwijt.
Zit ik nou tegen een compilerbug aan te kijken? (VS2010), of is dit te verwachten gedrag?