【发布时间】:2012-05-07 15:39:57
【问题描述】:
我正在尝试从静态成员函数实例化一个对象。我已经定义了:
class A
{
public:
A( );
A(int aParam);
~A( );
static A* Creator( );
private:
int m_nData;
};
并实施:
#include "A.h"
A::A()
{
}
A::A(int aParam)
{
m_nData = aParam;
}
A::~A()
{
}
A* A::Creator()
{
return new A(0);
}
可以,但删除对象时出现问题:
#include "A.h"
#include <stdio.h>
int main(int argc, char** argv)
{
A* pointer = A::Creator();
delete pointer;
return 0;
}
此示例按预期工作。我担心问题可能会更复杂。我将尝试提供更多详细信息: 我在 dll 库 (Windows) 中有一个类似于此处描述的类。当我从程序中调用静态函数时,出现错误(调试时): HEAP [program.exe]:指定给 RtlValidateHeap 的地址无效(0000000000BA0000, 000000000264B3D0) Windows 已在 program.exe 中触发断点。
这可能是由于堆损坏,这表明 program.exe 或其已加载的任何 DLL 中存在错误。
根据我的测试,似乎新创建的对象正在堆栈中分配。
任何帮助将不胜感激。
【问题讨论】:
-
这甚至无法编译,请发布可编译的解决方案。
-
您发布的代码唯一的问题是缺少析构函数定义和几个语法错误。除非在最极端的情况下,否则这将导致链接器错误。你没有显示的东西是你崩溃的罪魁祸首。
-
我预计还有其他问题。该对象肯定是在堆上分配的,您展示的最小示例应该可以正常工作。这个确切的示例是否以某种方式失败,或者您是否错过了简化发布的重要细节?
-
-1 不是实际代码(在发表此评论时)。
-
请发布一个完整的、最小的、自包含的示例来展示您的问题。
标签: c++ static instantiation delete-operator