【问题标题】:Is it safe to use delete instead of delete[] on a POD array? [duplicate]在 POD 数组上使用 delete 而不是 delete[] 是否安全? [复制]
【发布时间】:2020-03-27 19:50:29
【问题描述】:

我正在用 C++ 编写一些内存管理代码,一开始我使用char *ptr = new char[1024] 而不是void *malloc(unsigned int size) 来获取缓冲区,此后,我的代码中没有数组的概念,所有操作都是由指针。

但是当我想释放他们时,我有些担心。据我所知,C++ 要求程序员在使用new *type*[] 获取内存时使用delete[],但此时我只得到一个指针(在上面的例子中是ptr)。在编码之前,我认为为什么使用delete[] 是在每个元素上调用析构函数。但我不确定 pod 阵列上的 deletedelete[] 是否有区别。

那么在 pod 阵列上使用 delete ptr 是否安全?

【问题讨论】:

标签: c++ pointers memory-management delete-operator


【解决方案1】:

new 附带deletenew [] 附带delete []。你没有其他option

由删除表达式调用以释放先前的存储空间 分配给单个对象。标准库的行为 除非 ptr 为空,否则此函数的实现是未定义的 指针 或 是先前从标准库中获得的指针 operator new(size_t) 或 operator new(size_t, std::nothrow_t)。

混合使用这些运算符会导致未定义的行为。

【讨论】:

    猜你喜欢
    • 2015-06-18
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 2016-01-30
    • 1970-01-01
    • 2013-02-11
    相关资源
    最近更新 更多