C++的构造函数可以抛出异常么

问题描述

C++的构造函数可以抛出异常么

如题,C++的构造函数可以抛出异常么,如果有异常,除了资源泄露之外,还会引起其他问题么?

解决方案

构造函数丢出异常不等于说就一定资源泄露。构造函数丢出异常很正常,无法构造对象,或者构造函数的参数不合法,就应该丢出异常,试想,一个表示日期的类,你传入
2015-13-34 它还能构造成功,那危害性一点不小于资源泄露。

解决方案二:

你编码了什么异常,它就有什么异常,如指针越界、功能异常等

解决方案三:

构造函数抛出异常会导致西沟函数不会调用,就会可能资源泄露。所以最好不要这么做。

解决方案四:

可以抛出异常,只不过要特别注意有没有资源泄露。
可以这样认为:构造函数不抛出异常,不能保证一定没有资源泄露;反过来,抛出异常,也未必一定资源泄露。一切都取决于整个代码的逻辑的严密性。

时间: 2024-09-08 10:19:10

C++的构造函数可以抛出异常么的相关文章

C++的构造函数和析构函数

1.构造函数和析构函数为什么没有返回值? 构造函数和析构函数是两个非常特殊的函数:它们没有返回值.这与返回值为void的函数显然不同,后者虽然也不返回任何值,但还可以让它做点别的事情,而构造函数和析构函数则不允许.在程序中创建和消除一个对象的行为非常特殊,就像出生和死亡,而且总是由编译器来调用这些函数以确保它们被执行.如果它们有返回值,要么编译器必须知道如何处理返回值,要么就只能由客户程序员自己来显式的调用构造函数与析构函数,这样一来,安全性就被人破坏了.另外,析构函数不带任何参数,因为析构不需

C++异常和错误处理经验谈

代替 try / catch / throw 的通常做法是返回一个返回代码(有时称为错误代码),例如,printf(), scanf() 和 malloc()就是这样工作的:调用者通过if等语句来测试返回值判断函数是否成功. 尽管返回代码技术有时是最适当的错误处理技术,但会增加不必要的if语句这样的令人讨厌的效果. 质量降级:众所周知,条件语句可能包含的错误大约十倍于其他类型的语句.因此,在其他都相同时,如果你能从代码中消除条件语句,你会得到更健壮的代码. 推迟面市:由于条件语句是分支点,而它们

Andorid-15k+的面试题。

andorid开发也做了3年有余了,也面试很多加企业,借此机会分享一下,我们中遇到过的问题以及解决方案吧,希望能够对正在找工作的andoird程序员有一定的帮助. 特别献上整理过的50道面试题目 1.listView的优化方式 重用convertView viewHolder static class viewHolder 在列表里面有图片的情况下,监听滑动不加载图片 多个不同布局,可以创建不同的viewHolder和convertView进行重用 2.listView展示数据几种形式 从sql

Java 23种设计模型详解_java

设计模式(Design Patterns)                                   --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每

Bjarne Stroustrup对C++程序员的忠告

转自:http://blog.csdn.net/adm_qxx/archive/2007/05/20/1617488.aspx 第1章 致读者 [1] 在编写程序时,你是在为你针对某个问题的解决方案中的思想建立起一种具体表示.让程序的结构尽可能地直接反映这些思想: [a] 如果你能把"它"看成一个独立的概念,就把它做成一个类. [b] 如果你能把"它"看成一个独立地实体,就把它做成某个类的一个对象. [c] 如果两个类有共同的界面,将此界面做成一个抽象类. [d]

一个跨平台的 C++ 内存泄漏检测器

内存泄漏对于C/C++程序员来说也可以算作是个永恒的话题了吧.在Windows下,MFC的一个很有用的功能就是能在程序运行结束时报告是否发生了内存泄漏.在Linux下,相对来说就没有那么容易使用的解决方案了:像mpatrol之类的现有工具,易用性.附加开销和性能都不是很理想.本文实现一个极易于使用.跨平台的C++内存泄漏检测器.并对相关的技术问题作一下探讨. 基本使用 对于下面这样的一个简单程序test.cpp: 我们的基本需求当然是对于该程序报告存在两处内存泄漏.要做到这点的话,非常简单,只要

C++的try_catch异常

C++的try_catch异常 一.简单的例子 首先通过一个简单的例子来熟悉C++的try/catch/throw: 1 #include<iostream.h> //包含头文件 2 #include<stdlib.h> 3 double fuc(double x, double y) //定义函数 4 { 5 if(y==0) 6 { 7 throwy; //除数为0,抛出异常 8 } 9 return x/y; //否则返回两个数的商 10 } 11 void main() 1

Java之美[从菜鸟到高手演变]之设计模式

 本文转自http://blog.csdn.net/zhangerqing/article/details/8194653/ 设计模式(Design Patterns)                                   --可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模

JAVA 入坑教程 | 基础语法

Java 基础语法  一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一条狗是一个对象,它的状态有:颜色.名字.品种:行为有:摇尾巴.叫.吃等. 类:类是一个模板,它描述一类对象的行为和状态. 方法:方法就是行为,一个类可以有很多方法.逻辑运算.数据修改以及所有动作都是在方法中完成的. 实例变量:每个对象都有独特的实例变量,对象的状态由这些实例变量的值决定. 第一个J