【发布时间】:2019-01-18 14:13:45
【问题描述】:
我正在尝试在特定内存位置运行类的构造函数/默认初始化程序。
我正在尝试使用池,因此我已经为对象分配了内存(使用 malloc),并且我有我想去的地址。
我只是不知道如何在那个 void* 位置运行对象的构造函数。
这可能吗?
【问题讨论】:
标签: c++
我正在尝试在特定内存位置运行类的构造函数/默认初始化程序。
我正在尝试使用池,因此我已经为对象分配了内存(使用 malloc),并且我有我想去的地址。
我只是不知道如何在那个 void* 位置运行对象的构造函数。
这可能吗?
【问题讨论】:
标签: c++
阅读更多关于 C++ 的内容(它是一种非常复杂的编程语言;很少有人能完全掌握它,我当然不会)。我推荐一本好书,例如Programming: Principle and Practice Using C++(C++ 的主要设计师Stroustrup 所著)。然后查看一些 C++ reference 站点和一些标准,如 n3337(用于 C++11)或一些更新版本(如 C++14 或 C++17)。
你想要placement new,所以用1在指针p(声明void*p;)的位置构造一个类Cla的对象,你的代码:
Cla*ptr = new(p) Cla(1);
顺便说一句,如果SubCla 是Cla 的子类(具有两个参数的适当构造函数),您当然可以拥有Cla*ptr = new(p) SubCla(1, "x");
【讨论】: