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)
相当于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)