callerid = (INumberCaller*) new TNumberCaller->createNumberCaller11(1, 100.10); //select1
callerid = (INumberCaller*) new TNumberCaller->createNumberCaller22(12, 100.2, "Mansion New York", 2200);//select2
callerid = (INumberCaller*) new TNumberCaller->createNumberCaller33(123, 100.3, 3330); //select3
callerid = (INumberCaller*) new TNumberCaller->createNumberCaller44(1234, "Mansion New York", 4444); //select4
That code is leaking memory. You are creating temporary TNumberCaller objects just to call non-static methods that in turn return new objects, and then you are not freeing the temp objects.
For what you are attempting to do, define multiple constructors with different parameters, don't use named methods, eg:
class TNumberCaller : public xCommon, public INumberCaller
{
public:
__fastcall TNumberCaller(int param1, double param2); //select1
__fastcall TNumberCaller(int param1, double param2, const String ¶m3, int param4);//select2
__fastcall TNumberCaller(int param1, double param2, int param3); //select3
__fastcall TNumberCaller(int param1, const String ¶m2, int param3); //select4
};
...
callerid = (INumberCaller*) new TNumberCaller(1, 100.10); //select1
callerid = (INumberCaller*) new TNumberCaller(12, 100.2, "Mansion New York", 2200);//select2
callerid = (INumberCaller*) new TNumberCaller(123, 100.3, 3330); //select3
callerid = (INumberCaller*) new TNumberCaller(1234, "Mansion New York", 4444); //select4
If you want to use named methods, they need to be declared as 'static', eg:
class TNumberCaller : public xCommon, public INumberCaller
{
public:
__fastcall TNumberCaller(int param1, double param2, const String ¶m3, int param4);
static _di_INumberCaller createNumberCaller11(int param1, double param2); //select1
static _di_INumberCaller createNumberCaller22(int param1, double param2, const String ¶m3, int param4);//select2
static _di_INumberCaler createNumberCaller33(int param1, double param2, int param3); //select3
static _di_INumberCaller createNumberCaller44(int param1, const String ¶m2, int param2); //select4
};
...
_di_INumberCaller TNumberCaller::createNumberCaller11(int param1, double param2)
{
return (INumberCaller*) new TNumberCaller(param1, param2, String(), 0);
}
_di_INumberCaller TNumberCaller::createNumberCaller22(int param1, double param2, const String ¶m3, int param4)
{
return (INumberCaller*) new TNumberCaller(param1, param2, param3, param4);
}
_di_INumberCaler TNumberCaller::createNumberCaller33(int param1, double param2, int param3)
{
return (INumberCaller*) new TNumberCaller(param1, param2, String(), param3);
}
_di_INumberCaller TNumberCallercreateNumberCaller44(int param1, const String ¶m2, int param2)
{
return (INumberCaller*) new TNumberCaller(param1, 0.0, param2, param3);
}
...
callerid = TNumberCaller::createNumberCaller11(1, 100.10); //select1
callerid = TNumberCaller::createNumberCaller22(12, 100.2, "Mansion New York", 2200);//select2
callerid = TNumberCaller::createNumberCaller33(123, 100.3, 3330); //select3
callerid = TNumberCaller::createNumberCaller44(1234, "Mansion New York", 4444); //select4
--
Remy Lebeau (TeamB)
Connect with Us