NoTrust Asked:2020-01-06 01:55:37 +0800 CST2020-01-06 01:55:37 +0800 CST 2020-01-06 01:55:37 +0800 CST 不使用 new 操作符进行初始化的内存分配 772 操作员是否可以执行以下操作new: class MyData { char data[1024]; MyData() {} }; MyData* dataArray = static_cast<MyData*>(malloc(10 * sizeof(MyData))); 那些。为一个对象或对象数组分配内存而不初始化它? c++ 1 个回答 Voted Best Answer Croessmah stands with Russia 2020-01-06T02:06:05+08:002020-01-06T02:06:05+08:00 当然。您可以使用相同的malloc,也可以使用operator new(or operator new[]),这将分配一块“原始”内存。operator new与-的区别operator new[]实际上是您可以更有效地实现这些运算符的自己的版本。所以所说的一切都operator new适用于operator new[]. operator new还要求一块连续的内存,并返回一个指向“某物”的指针(void*)。这个东西也不会调用任何构造函数,但它已经知道异常,如果选择失败,那么它会抛出异常而不返回nullptr(尽管并不总是这样做)。事实上,一开始他还是会碰碰运气new_handler,但让我们忽略这一时刻。还有一个版本不抛出异常,但nullptr在失败的情况下返回,还有一个版本根本不分配内存,只是一个指针参数在“传输中”传递(这个版本用于放置 new) ,你也可以重载operator new,但现在不是这样。 要释放分配给 的内存operator new,请使用operator delete。 要释放分配给 的内存operator new[],请使用operator delete[]。 void *p = operator new(sizeof(T) * count); operator delete (p); 您可以使用放置 new调用构造函数进行初始化: T *pT = new (p) T[count]; 当然,使用这种方法,构造函数和析构函数的调用完全由代码作者来完成。
当然。您可以使用相同的
malloc
,也可以使用operator new
(oroperator new[]
),这将分配一块“原始”内存。operator new
与-的区别operator new[]
实际上是您可以更有效地实现这些运算符的自己的版本。所以所说的一切都operator new
适用于operator new[]
.operator new
还要求一块连续的内存,并返回一个指向“某物”的指针(void*
)。这个东西也不会调用任何构造函数,但它已经知道异常,如果选择失败,那么它会抛出异常而不返回nullptr
(尽管并不总是这样做)。事实上,一开始他还是会碰碰运气new_handler
,但让我们忽略这一时刻。还有一个版本不抛出异常,但nullptr
在失败的情况下返回,还有一个版本根本不分配内存,只是一个指针参数在“传输中”传递(这个版本用于放置 new) ,你也可以重载operator new
,但现在不是这样。要释放分配给 的内存
operator new
,请使用operator delete
。要释放分配给 的内存
operator new[]
,请使用operator delete[]
。您可以使用放置 new调用构造函数进行初始化:
当然,使用这种方法,构造函数和析构函数的调用完全由代码作者来完成。