C++ C++;从静态函数实例化类
我试图从静态成员函数实例化一个对象。我定义了:C++ C++;从静态函数实例化类,c++,static,instantiation,delete-operator,C++,Static,Instantiation,Delete Operator,我试图从静态成员函数实例化一个对象。我定义了: 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() {
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;
}
#包括“A.h”
#包括
int main(int argc,字符**argv)
{
A*指针=A::Creator();
删除指针;
返回0;
}
此示例按预期工作。我担心这个问题可能更复杂。我将尝试提供更多细节:
我在dll库(Windows)中有一个类似于这里描述的类。当我从程序调用静态函数时,我得到一个错误(调试时):
HEAP[program.exe]:为RtlValidateHeap(0000000000 BA0000,000000000 264B3D0)指定的地址无效
Windows已在program.exe中触发断点
这可能是由于堆损坏,这表明program.exe或其加载的任何DLL中存在错误
正如我所测试的,新创建的对象似乎被分配到堆栈中
任何帮助都将不胜感激。我认为您缺少析构函数实现。编译器应该就此警告您。使用gcc和前面提到的修复程序,它可以工作。这甚至不能编译,请发布一个可编译的解决方案。您发布的代码唯一的错误是缺少析构函数定义和一些语法错误。除非在最极端的情况下,否则这将导致链接器错误。你没有表现出来的东西是你撞车的罪魁祸首。我想是别的东西出了问题。对象肯定是在堆上分配的,您所展示的最小示例应该可以很好地工作。这个确切的例子是否以某种方式失败了,或者您在简化它以供发布时遗漏了一个重要的细节?-1不是实际的代码(在发表此评论时)。请发布一个完整的、最小的、自我包含的例子来展示您的问题。