在空隙指针上使用新的

Using new on void pointer

本文关键字:指针      更新时间:2023-10-16
int main()
{
    void* Foo = new???
    delete Foo;
}

您如何做类似上述操作?您不能放置new void[size]。而且我不想知道如何使用malloc()free()进行操作。我已经知道有效。我很好奇,想知道它如何完成新的和删除。

我用谷歌搜索了有关operator new(size)的信息;和operator delete(size);

这些和new/delete有什么区别?C 为什么不仅允许新的void* [size]

这将有能力:

int main()
{
    void* Foo = ::operator new(N);
    ::operator delete(Foo);
}

这些运算符分配/deallocate在字节中测量的原始内存,就像 malloc一样。

为什么C 不仅允许新的void [size]?

因为 void不是对象;它没有大小!应该分配多少空间?请记住,new T[size]大约等效于malloc(sizeof(T) * size)

如果您只想要一个原始字节数组,则可以使用char*


*,尽管当然,因为这是C ,您应该使用std::vector<char>之类的东西来避免记忆渗透和异常安全问题。

c 在分配的构造对象中使用new T的某些变化。或某种类型的Tnew T[n]。如果您确实需要非初始化的内存(很少这样做),则可以使用operator new()operator delete()分配/dealsloce llate:

void* ptr = operator new(size);
operator delete(ptr);

(类似于数组表格)

您可以做

void* data = new char[num_of_bytes];

以与malloc类似的方式分配一些内存

void *可转换为任何指针类型。您可以简单地做void *Foo = new int或您想要的任何其他类型。但是确实没有理由在C 中进行此操作。