C++未初始化的类实例数组

Nik*_*s R 5 c++ initialization new-operator alloc

我一直在寻找,但无法找到答案.有没有办法告诉new操作员不要调用类构造函数?

MyObject* array = new MyObject[1000];
Run Code Online (Sandbox Code Playgroud)

这将召唤MyObject()一千次!我想自己填充分配的内存,不需要在构造函数中初始化任何信息.使用malloc()不是非常和谐的C++代码imho.

MyObject* array = (MyObject*) malloc(sizeof(MyObject) * 1000);
Run Code Online (Sandbox Code Playgroud)

Jos*_*eld 6

相当于C ++的malloc是分配函数operator new。您可以这样使用它:

MyObject* array = static_cast<MyObject*>(::operator new(sizeof(MyObject) * 1000));
Run Code Online (Sandbox Code Playgroud)

然后,可以使用new放置构造一个特定的对象:

new (array + 0) MyObject();
Run Code Online (Sandbox Code Playgroud)

替换0为您要初始化的偏移量。

但是,我想知道您是否真的想自己进行这种动态分配。也许a std::map<int, MyObject>或a std::unordered_map<int, MyObject>更适合您,以便您可以MyObject在任何索引处创建a 。

std::unordered_map<int, MyObject> m;
m[100]; // Default construct MyObject with key 100
Run Code Online (Sandbox Code Playgroud)