C++ 指针释放检查

本文讨论了在C++编程中如何进行指针释放的检查,特别是当某些编译器支持sizeof()对非法类型返回0时,如何避免因此导致的程序中断问题。
摘要由CSDN通过智能技术生成

在一些编译器中,支持sizeof()返回0,所以,会用到是否为合法类型,否则会导致中断触发 

#include <iostream>

using namespace std;

template<typename T>
inline void checked_delete(T* x) noexcept
{
    typedef char type_must_be_complete[sizeof(T) ? 1 : -1];
    (void) sizeof(type_must_be_complete);
    delete x;
}

template<typename T>
inline void checked_array_delete(T* x) noexcept
{
    typedef char type_must_be_complete[sizeof(T) ? 1 : -1];
    (void) sizeof(type_must_be_complete);
    delete []x;
}

template<typename T>
struct checked_deleter
{
    typedef void result_type;
    typedef T* argument_type;

    void operator()(T* x) const noexcept
    {
        checked_delete<T>(x);
    }
};

template <typename T>
struct checked_array_deleter
{
    typedef void result_type;
    typedef T* argument_type;

    void operator()(T* x) const noexcept
    {
        checked_array_delete<T>(x);
    }
};

class emptyClass
{
};

struct emptyStruct
{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值