c++ - 从 void 指针缓冲区进行结构实例化

标签 c++ struct allocation void-pointers placement-new

下面是一些我觉得很有趣的 C++ 代码,但我知道它可以工作。

定义了一个struct,在程序中我们使用void指针分配内存。然后使用分配的缓冲区创建结构。

这是一些代码

typedef struct{
 char buffer[1024];
} MyStruct

int main()
{
   MyStruct* mystruct_ptr = 0;

   void* ptr = malloc(sizeof(MyStruct));

   // This is the line that I don't understand
   mystruct_ptr = new (ptr) MyStruct();

   free(ptr);

   return 0;
}

该代码包含更多内容,但这就是它的要点。

我还没有测试过这段代码,但我正在查看的代码经过了很好的测试,并且可以正常工作。但是如何呢?

谢谢。

编辑:修复了内存泄漏。

最佳答案

这叫做 placement new , 它在预分配的缓冲区上构造一个对象(您指定地址)。

编辑:更有用的链接

关于c++ - 从 void 指针缓冲区进行结构实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1930146/

相关文章:

C++ 分析 : KiFastSystemCallRet

c++ - 使用此指针指向类中的位域

c++ - std::allocator 构造/销毁与放置 new/p->~T()

c++ - 什么时候在 C/C++ 中分配静态内存?在编译时还是在程序运行的最开始?

c++ - Qt 每当按下时进入 QTextEdit

c++ - 在这个例子中将创建多少个 vtable 和 vpointer?

struct - Rust 支持嵌套结构吗?

json - 如何在 Golang 结构中使用 omitempty 标志更新 Mongodb 字段

c++ - 结构是 "reset"

c++ - 将 emplace_back 对象放入 std::list 的正确方法