Foo* set = new Foo[100];
// ...
delete [] set;
Run Code Online (Sandbox Code Playgroud)
您没有将数组的边界传递给delete[].但是这些信息存储在哪里?它是标准化的吗?
new/delete据说动态分配在免费商店中进行,
而malloc/free操作则使用堆.
在实践中,我想知道是否存在实际差异.
编译器是否区分了这两个术语?(免费商店和堆,不new/malloc)
我怎么能用reallocC++?它似乎在语言中缺失 - 有new,delete但不是resize!
我需要它,因为当我的程序读取更多数据时,我需要重新分配缓冲区来保存它.我不认为delete旧指针和new新的更大的指针是正确的选择.
我的一些代码仍然使用malloc而不是new.原因是因为我害怕使用,new因为它抛出异常,而不是返回NULL,我可以很容易地检查.结束语每次调用new的try{}catch(){}也看起来并不好.而在使用时malloc我可以做到if (!new_mem) { /* handle error */ }.
所以我有一个问题.我可以同时使用智能指针malloc吗?
就像是:
SmartPointer<Type> smarty = malloc(sizeof(Type));
Run Code Online (Sandbox Code Playgroud)
像这样的东西.
这可能吗?
谢谢,Boda Cydo.
据我所知,没有为没有确切的替代realloc的C在C++喜欢new的malloc.但是,当我使用realloc in C++来改变new运算符分配的内存时,它工作正常.
像我在下面的代码中那样使用这两个(new和realloc)是否安全,或者它可能导致一些问题?
#include <iostream>
#include <cstdlib>
int main()
{
int size = 5;
int * arr = new int[size]{ 1,3,5,7,9 };
for (int i = 0; i < size; i++)
std::cout << *(arr + i) << (i < size - 1 ? ' ' : '\n');
size++;
arr = (int*)realloc(arr, size * sizeof(int));
*(arr + size - 1) = 11; …Run Code Online (Sandbox Code Playgroud)