int main()
{
void* Foo = new???
delete Foo;
}
你怎么做上面这样的事情?你不能放new void[size]
。我不想知道如何使用malloc()
和free()
来执行此操作。我已经知道这很有效。我很好奇,想知道如何使用new和delete。
我用Google搜索了一下,看到了operator new(size)
的一些内容;和operator delete(size)
;
这些与new
/ delete
之间有什么区别?为什么C ++不仅允许新的void* [size]
?
答案 0 :(得分:27)
这样可以解决问题:
int main()
{
void* Foo = ::operator new(N);
::operator delete(Foo);
}
这些运算符分配/释放以字节为单位的原始内存,就像malloc
一样。
答案 1 :(得分:18)
为什么C ++不仅允许新的void [size]?
因为void
不是对象;它没有大小!应分配多少空间?请注意,new T[size]
大约等同于malloc(sizeof(T) * size)
。
如果您只想要一个原始字节数组,那么您可以使用char
。 *
<小时/> *当然,虽然这是因为这是C ++,你应该使用像
std::vector<char>
之类的东西来避免内存泄漏和异常安全问题。
答案 2 :(得分:11)
C ++在使用new T
的某些变体分配的构造对象中传播。某些类型new T[n]
或T
。如果你真的需要未初始化的内存(这种情况非常罕见),你可以使用operator new()
和operator delete()
来分配/取消分配它:
void* ptr = operator new(size);
operator delete(ptr);
(类似于数组形式)
答案 3 :(得分:2)
void *
可转换为任何指针类型。您可以简单地执行void *Foo = new int
或任何其他类型的操作。但是在C ++中确实没有理由这样做。
答案 4 :(得分:1)
你可以做
void* data = new char[num_of_bytes];
以类似于malloc的方式分配一些内存