从GNU上的new运算符调用类构造函数 - 使用无效类

gra*_*asm 3 c++ gcc

我问题的最接近的线程在这里.我试图用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'

你能指点我正确的方向吗?

ken*_*ytm 8

你想要一个新的位置.

void* ptr = malloc(sizeof(A));
A* obj = new(ptr) A;
Run Code Online (Sandbox Code Playgroud)


CB *_*ley 6

你不能在一个对象上调用构造函数; 构造函数只能在创建对象时调用,因此根据定义,该对象尚不存在.

这样做的方法是放置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)