关于DLL和不同版本的运行时,我有些不清楚。
我知道,例如,在我的DLL中,我有一个这样的函数:
void deletePointer(int *something)
{
delete something;
}
如果在main()函数中使用new分配了某些东西,这可能会导致问题。我不清楚的地方如下:
说我在DLL中有一个类,我在main中实例化,然后尝试再次执行此操作,它仍然是一个问题吗?
例: //在我的DLL中
class Base
{
void deletePointer(int *something)
{
delete something;
}
}
//在exe
中int main()
{
Base * base = new Base();
int * myInt = new int(23);
base->deletePointer(myInt); //is this a problem?
}
基本上我不清楚的是,如果我实例化删除指针的DLL类,运行时“分配它的人,必须删除它”规则是适用的。
由于
答案 0 :(得分:1)
是的,可能会导致问题。您需要做的只是在分配它的地方免费分配内存。这可能意味着您需要实现在DLL中创建和删除类实例的方法;例如,如果你想让DLL创建/销毁Base的实例,那么:
class Base
{
static Base *create();
static void destroy(Base *b);
}
在exe中:
int main()
{
Base *base = Base::create();
// blah
Base::destroy(base);
}
答案 1 :(得分:0)
在这方面,DLL中的普通函数和DLL的类实例的方法之间没有区别。所以他们会导致相同的行为。