`
kmplayer
  • 浏览: 508951 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

异常处理之三

阅读更多
1,c++标准提供了一个RAII封装类,用于封装指向对内存的指针,这就使得程序能够自动释放这些内存.
2,auto_ptr重载了指针运算符*和->,因此可以像使用原始指针那样使用auto_ptr对象.
3,auto_ptr类模版可用作封装指针数据成员,由于通过值引用的类对象auto_ptr总会被析构,因此它封装的原始指针总能被释放.
#include <iostream>
#include <cstddef>
#include <memory>
using namespace std;

class A
{
    int val;
public:
    A(int i):val(i){}
    int getVal(){ return val; }
    static void* operator new(size_t sz)
    {
        void* p=::operator new(sz);//****
        cout<<"Allocating A on the heap at address"<<p<<endl;
        return p;
    }
    static void operator delete(void* p)
    {
        cout<<"Deleting A at address"<<p<<endl;
        ::operator delete(p);
    }
};

int main()
{
    freopen("main.txt","w",stdout);
    auto_ptr<A> pAutoA(new A(3));
    cout<<pAutoA->getVal()<<endl;
    //虽然没有显式删除原始堆内存,但是在栈反解的时候
    //pAutoA的析构函数删除了堆内存.
}

引用

Allocating A on the heap at address0x3e3f80
3
Deleting A at address0x3e3f80

由输出结果可以看出:虽然没有显式删除原始堆内存,但是在栈反解的时候pAutoA的析构函数删除了堆内存.
分享到:
评论

相关推荐

    异常处理 异常处理 异常处理

    在Windows中,异常过滤器可以返回三个预定义的标识符:`EXCEPTION_EXECUTE_HANDLER`、`EXCEPTION_CONTINUE_SEARCH`和`EXCEPTION_CONTINUE_EXECUTION`,它们分别表示执行异常处理程序、继续搜索异常处理程序和继续...

    java异常处理习题

    * `try`、`catch` 和 `finally` 是 Java 异常处理的三个主要组成部分。 二、异常处理机制 * 异常是一种对象,继承自 `Throwable` 类。 * 异常处理的主要步骤是:抛出异常(throw) -&gt; 捕捉异常(catch) -&gt; 处理...

    C#异常处理总结及简单实例

    C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。 1、try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。 2、catch:程序通过异常处理程序捕获异常。catch ...

    MySQL定义异常和异常处理详解

    MySQL中的异常处理是数据库编程中不可或缺的一部分,它允许开发者预设对可能出现的错误或异常的响应,从而确保程序的稳定性和健壮性。在MySQL中,异常定义和处理主要是通过`DECLARE`语句来实现的。 1. **异常定义**...

    异常处理.ppt异常处理.ppt异常处理.ppt异常处理.ppt异常处理.ppt

    【异常处理】是编程中必不可少的一个环节,尤其是在Java这样的面向对象语言中。异常处理机制使得程序在遇到错误时能够优雅地中断执行流程,提供错误信息,并有机会进行恢复操作,而不是简单地崩溃。以下是对异常处理...

    ADS异常处理.pptADS异常处理.pptADS异常处理.ppt

    《ADS异常处理详解》 异常处理是嵌入式系统中至关重要的部分,特别是在基于ARM架构的系统中。本文将深入探讨ARM处理器的异常处理机制,包括异常类型、处理流程、异常优先级以及向量表等内容。 一、异常类型 ARM...

    易语言HOOK异常处理

    "New_SE_Handler"可能是一个新的结构化异常处理程序,结构化异常处理(SEH)是Windows操作系统中的一个特性,用于处理硬件和软件异常。 "GetSeAddr"可能是获取异常发生时的地址函数,这对于分析异常原因和定位问题...

    使用Spring AOP对异常进行统一处理

    3.处理日志时,需要在每一个try-catch块包含一些处理代码,有时候异常处理的代码比正常执行代码还多,污染正常执行代码。 4.同样类型异常有不同的处理方式,使最终的处理变得复杂。 5.接口抛出异常,破坏封装,打破...

    ARM处理器异常处理步骤

    3. 若在异常处理期间设置了中断禁止位,则需要清除该中断禁止位,允许后续中断正常发生。 整个异常处理过程中,处理器的响应和返回步骤都需要按照ARM架构所定义的严格顺序来执行,以确保系统稳定运行和程序执行的...

    易语言SEH异常处理

    在易语言中,SEH(Structured Exception Handling)异常处理机制是用于处理程序运行时可能出现的错误或异常情况的重要工具。本文将详细讲解易语言中的SEH异常处理,以及相关的关键技术点。 SEH是微软Windows操作...

    三角形的判断和异常处理

    判断三个整数是否能构成一个三角形。请编写Java程序实现该任务,并自定义异常来处理当三个整数不能...(要求:至少处理三种异常,每种异常都要给出异常原因。比如某个数为0,某个数为负数,两数之和不大于第三个数等)

    异常处理流程图Exception

    异常处理机制包括异常的抛出、捕获和处理三个主要阶段。 ### 异常抛出(Throw) 在代码执行过程中,如果遇到无法继续正常执行的情况,如除数为零、文件不存在、内存不足等,可以通过`throw`关键字抛出异常。例如,...

    Windows下的异常处理

    3. 异常过滤器:在找到异常处理程序后,会执行异常过滤器代码,该代码可以决定如何处理异常。过滤器可能选择忽略异常、显示错误信息或执行特定的清理操作。 4. 异常处理:如果过滤器决定处理异常,那么异常处理程序...

    高效的java异常处理框架高效的java异常处理框架高效的java异常处理框架

    三、异常处理的基本原则 在设计一个异常处理的框架时,需要遵循以下基本原则: 1、捕获异常:尽量捕获所有可能的异常,避免程序崩溃。 2、处理异常:对捕获的异常进行处理,尽量恢复程序的正常运行。 3、记录异常...

    JCVM异常处理机制

    #### 三、JCVM异常处理机制的设计与实现 在设计JCVM的异常处理机制时,需要考虑以下几个关键点: 1. **异常类层次结构的构建**:确保所有异常类正确地继承自`Throwable`类,并根据异常的性质分类到合适的子类中。 2...

    异常处理机制知识点小总结

    异常处理是Java编程中至关重要的一个概念,它确保了程序在遇到错误或异常情况时能够以优雅的方式继续执行或者终止。下面是对Java异常处理机制的详细解析。 在Java中,异常是程序运行时发生的错误,它中断了正常的...

    reactnative异常处理库

    3. **错误报告与日志记录**: 当错误发生时,异常处理库会记录错误信息,包括堆栈跟踪、错误类型等,这些信息对于开发者定位问题至关重要。部分库还支持将这些信息发送到远程服务器,便于后期分析和调试。 4. **...

    Spring Cloud Gateway的全局异常处理

    #### 三、自定义全局异常处理逻辑 以下是一个示例代码片段,展示了如何创建一个自定义的异常处理类`JsonExceptionHandler`: ```java package com.cxytiandi.gateway.exception; import java.util.HashMap; ...

Global site tag (gtag.js) - Google Analytics