C++ 从静态函数实例化类

C++ Instantiate class from static function

本文关键字:实例化 静态函数 C++      更新时间:2023-10-16

我正在尝试从静态成员函数实例化对象。我已经定义了:

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 在程序.exe中触发了断点。

这可能是由于堆损坏,这表示程序中存在错误.exe或它已加载的任何 DLL。

正如我所测试的那样,似乎新创建的对象正在堆栈中分配。

任何帮助将不胜感激。

我认为您缺少析构函数实现。编译器应该警告你这一点。使用 gcc 和前面提到的修复程序,它可以工作。