Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;从静态函数实例化类_C++_Static_Instantiation_Delete Operator - Fatal编程技术网

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不是实际的代码(在发表此评论时)。请发布一个完整的、最小的、自我包含的例子来展示您的问题。