Hey everyone
Here's my problem: In my last rewrite of my game, there were memory leaks everywhere. In this rewrite, I don't want that to happen. If it does, tracking them down takes a lot of time.
So here's my objective: Make a class that can track memory leaks.
So I'm thinking, I'll just make a templated class that will tell me if the data wasn't freed by the time the destructor fires. Here's what I have so far:
Code:
template<class Type>
class vDynamicData
{
private:
Type* Data;
char* Name;
public:
vDynamicData( char* _Name );
~vDynamicData();
void Allocate();
void Free();
Type* Get();
operator Type*();
};
template<class Type>
vDynamicData<Type>::vDynamicData( char* _Name )
{
Data = NULL;
Name = _Name;
}
template<class Type>
vDynamicData<Type>::~vDynamicData()
{
if( Data )
{
cout << "Unfreed: " << Name << endl;
}
}
template<class Type>
void vDynamicData<Type>::Allocate()
{
Data = new Type;
}
template<class Type>
void vDynamicData<Type>::Free()
{
delete Data;
Data = NULL;
}
template<class Type>
vDynamicData<Type>::operator Type*()
{
return Data;
}
The last function, the operator Type*() one, is to allow the use of dereferencing and the -> operator. Dereferencing works beautifully. The -> operator doesn't. So I looked on google, it turns out overloading the -> operator isn't allowed. But I'm not overloading it, I'm doing a typecasting... thing. (Not sure how to put that in words, lol.)
So how can I get the -> operator to work?
Here's the code where I test it out:
Code:
struct MyType
{
int A;
bool B;
char C;
};
int main()
{
vDynamicData<MyType> Num( "Test MyType" );
Num.Allocate();
Num->A = 3;
Num->B = true;
Num->C = '@';
cout << Num->A << Num->B << Num->C << endl;
Num.Free();
return 0;
}
and here's the errors I get:
c:\Documents and Settings\Evan Ovadia\My Documents\Visual Studio Projects\vDynamics\Main.cpp(67): error C2227: left of '->A' must point to class/struct/union
c:\Documents and Settings\Evan Ovadia\My Documents\Visual Studio Projects\vDynamics\Main.cpp(71): error C2227: left of '->A' must point to class/struct/union
c:\Documents and Settings\Evan Ovadia\My Documents\Visual Studio Projects\vDynamics\Main.cpp(68): error C2227: left of '->B' must point to class/struct/union
c:\Documents and Settings\Evan Ovadia\My Documents\Visual Studio Projects\vDynamics\Main.cpp(71): error C2227: left of '->B' must point to class/struct/union
c:\Documents and Settings\Evan Ovadia\My Documents\Visual Studio Projects\vDynamics\Main.cpp(69): error C2227: left of '->C' must point to class/struct/union
c:\Documents and Settings\Evan Ovadia\My Documents\Visual Studio Projects\vDynamics\Main.cpp(71): error C2227: left of '->C' must point to class/struct/union
c:\Documents and Settings\Evan Ovadia\My Documents\Visual Studio Projects\vDynamics\Main.cpp(67): error C2819: type 'vDynamicData<Type>' does not have an overloaded member 'operator ->'
with
[
Type=MyType
]
c:\Documents and Settings\Evan Ovadia\My Documents\Visual Studio Projects\vDynamics\Main.cpp(68): error C2819: type 'vDynamicData<Type>' does not have an overloaded member 'operator ->'
with
[
Type=MyType
]
c:\Documents and Settings\Evan Ovadia\My Documents\Visual Studio Projects\vDynamics\Main.cpp(69): error C2819: type 'vDynamicData<Type>' does not have an overloaded member 'operator ->'
with
[
Type=MyType
]
c:\Documents and Settings\Evan Ovadia\My Documents\Visual Studio Projects\vDynamics\Main.cpp(71): error C2819: type 'vDynamicData<Type>' does not have an overloaded member 'operator ->'
with
[
Type=MyType
]
c:\Documents and Settings\Evan Ovadia\My Documents\Visual Studio Projects\vDynamics\Main.cpp(71): error C2819: type 'vDynamicData<Type>' does not have an overloaded member 'operator ->'
with
[
Type=MyType
]
c:\Documents and Settings\Evan Ovadia\My Documents\Visual Studio Projects\vDynamics\Main.cpp(71): error C2819: type 'vDynamicData<Type>' does not have an overloaded member 'operator ->'
with
[
Type=MyType
]