C++ 从静态函数实例化类
C++ Instantiate class from static function
我正在尝试从静态成员函数实例化对象。我已经定义了:
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 和前面提到的修复程序,它可以工作。
相关文章:
- 将显式实例化的函数模板与转换匹配
- 以下代码如何工作以每次为唯一调用堆栈唯一实例化模板函数?
- 如何正确实例化静态字段 tat 是另一个类对象
- 如何同时别名和实例化模板函数?
- 找不到使用 bitset 实例化模板函数的有效方法
- 在构造函数中初始化静态函数指针
- 在定义之前显式实例化模板函数
- 虚幻引擎:实例化静态网格体在实例化时不旋转
- 如何使用引用类型实例化模板函数
- 使用运行时常量实例化的函数模板
- Win32:位图实例化中断函数
- Clang 在模板上下文中找不到在函数定义后实例化的函数
- 实例化模板函数时出现奇怪错误
- 如何在定义映射/集合时实例化比较函数(函子)
- C++:编译器仅根据需要实例化模板函数
- 有没有一种更简单的方法来实例化静态库
- 应该decltype(foo(1))实例化constexpr函数模板foo
- 基于运行时类型实例化构造函数
- 局部类型在未实例化的函数中作为模板参数
- 是否可以声明一个属于模板类的单一实例化的函数?