我问题的最接近的线程在这里.我试图用gcc编译以下代码:
#include <malloc.h>
class A
{
public:
A(){};
~A(){};
};//class A
int main()
{
A* obj = (A*) malloc( sizeof(A) );
if(obj==0) return 1 ;
obj->A::A(); /*error: invalid use of 'class A' */
obj->A::~A();
free(obj);
return 0;
};//
Run Code Online (Sandbox Code Playgroud)
从命令行我编译代码:
$ g++ -o main main.cpp main.cpp: In function 'int main()': main.cpp:22: error: invalid use of 'class A'
你能指点我正确的方向吗?
你想要一个新的位置.
void* ptr = malloc(sizeof(A));
A* obj = new(ptr) A;
Run Code Online (Sandbox Code Playgroud)
你不能在一个对象上调用构造函数; 构造函数只能在创建对象时调用,因此根据定义,该对象尚不存在.
这样做的方法是放置new.没有必要投你的malloc回报.它应该是void *因为它不会返回指向A的指针; 只是指向您计划构建的原始内存的指针A.
例如
void* mem = malloc( sizeof(A) );
A* obj = new (mem) A();
obj->~A();
free(mem);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1051 次 |
| 最近记录: |