相关疑难解决方法(0)

放置新的和删除

删除此处分配的所有内存的正确方法是什么?

  const char* charString = "Hello, World";
  void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);
  Buffer* buf = new(mem) Buffer(strlen(charString));

  delete (char*)buf;
Run Code Online (Sandbox Code Playgroud)

要么

  const char* charString = "Hello, World";
  void *mem = ::operator new(sizeof(Buffer) + strlen(charString) + 1);
  Buffer* buf = new(mem) Buffer(strlen(charString));

  delete buf;
Run Code Online (Sandbox Code Playgroud)

还是他们都一样?

c++ new-operator visual-c++ placement

47
推荐指数
3
解决办法
3万
查看次数

为什么在C++中没有放置删除表达式?

为什么C++没有直接对应于贴图新的贴片删除,即调用析构函数并调用适当的贴片删除操作符?

例如:

MyType *p = new(arena) MyType;
...
//current technique
p->~MyType();
operator delete(p, arena);

//proposed technique
delete(arena) p;
Run Code Online (Sandbox Code Playgroud)

c++ new-operator delete-operator c++11

30
推荐指数
4
解决办法
1万
查看次数