小编TG-*_*SAG的帖子

C++中的大小重新分配:全局运算符delete的正确行为是什么(void*ptr,std :: size_t size)

我不确定我是否在C++中正确理解了"大小的释放".在C++ 14中,以下签名被添加到全局范围:

void operator delete(void* ptr, std::size_t size) noexcept
Run Code Online (Sandbox Code Playgroud)

我正在使用GCC 7.1.0编译以下源代码:

#include <cstdio>   // printf()
#include <cstdlib>  // exit(),malloc(),free()
#include <new>      // new(),delete()

void* operator new(std::size_t size)
{
    std::printf("-> operator ::new(std::size_t %zu)\n", size);
    return malloc(size);
}

void operator delete(void* ptr) noexcept
{
    std::printf("-> operator ::delete(void* %p)\n", ptr);
    free(ptr);
}

void operator delete(void* ptr, std::size_t size) noexcept
{
    std::printf("-> operator ::delete(void* %p, size_t %zu)\n", ptr, size);
    free(ptr);
}


struct B
{
    double d1;
    void* operator new(std::size_t size)
    {
        std::printf("-> …
Run Code Online (Sandbox Code Playgroud)

c++ memory delete-operator c++14

8
推荐指数
1
解决办法
775
查看次数

标签 统计

c++ ×1

c++14 ×1

delete-operator ×1

memory ×1