在特定内存位置构造c ++对象[重复]
Posted
技术标签:
【中文标题】在特定内存位置构造c ++对象[重复]【英文标题】:Constructing a c++ object in a specific memory location [duplicate] 【发布时间】:2019-01-18 14:13:45 【问题描述】:我正在尝试在特定内存位置运行类的构造函数/默认初始化程序。
我正在尝试使用池,因此我已经为对象分配了内存(使用 malloc),并且我有我想去的地址。
我只是不知道如何在那个 void* 位置运行对象的构造函数。
这可能吗?
【问题讨论】:
【参考方案1】:阅读更多关于 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");
【讨论】:
以上是关于在特定内存位置构造c ++对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章