构造函数的初始化列表抛出异常

即使捕获了,依然会上抛。具体见:http://blog.csdn.net/hikaliv/article/details/4460180

#include <iostream>
using namespace std;

class A
{
public:
    A(int a) try: m_p(new char[a])
    {
    }
    catch(...)
    {
        m_p = NULL;
        cout << "catch1..." << endl;
    }

    ~A()
    {
        delete m_p;
    }
char * m_p;
};

int main()
{
    try
    {
        A a(-2);
    }
    catch(...)
    {
        cout << "catch2..." << endl;
    }
    return 0;
}

时间: 2024-10-12 23:30:13

构造函数的初始化列表抛出异常的相关文章

C++ 初始化形式、变量初始化规则、类构造函数的初始化列表

类构造函数的初始化列表,举例 一个对象的构造分两部分,首先是分配空间,然后初始化. 只要有对象生成,不管是以什么形式生成,都会调用构造函数进行初始化. 然后下面有个例子,在蓝色区域Big类的复制构造函数中,使用初始化列表进行成员的初始化(方法1)没有问题,而如果不使用初始化列表.直接在函数里用里面注释掉的代码(方法2)则会报错:Base类没有合适的构造函数. // W3-课程作业2-4.cpp : Defines the entry point for the console applicati

构造函数、初始化列表来初始化字段、析构函数、拷贝构造函数

#include <iostream> using namespace std; class Line { public: int getLength( void ); Line( int len ); // 简单的构造函数 Line( const Line &obj); // 拷贝构造函数 ~Line(); // 析构函数 private: int *ptr; }; // 成员函数定义,包括构造函数 Line::Line(int len) { cout << "

C++(二十八) — 构造函数的初始化列表

1.解决的问题: 在 B 类中,组合了一个 A 类对象,其中A类设计了构造函数.由于构造函数的调用规则,设计了构造函数就必须调用,但在定义B类时没有机会初始化A,因此采用构造函数的初始化列表来解决.  2.构造和析构调用顺序 先执行被组合对象的构造函数,如果组合对象有多个,则按照定义顺序,而不是按照初始化列表顺序.   析构函数,和构造函数的调用顺序相反. 举例如下: class A { public: A(int a_) { a = a_; cout << "A的构造函数,a: &

重拾C++之构造函数的初始化列表

"初始化列表少了一次调用默认构造函数的过程,这对于数据密集型的类来说,是非常高效的." 出自:C++ 初始化列表

【校招面试 之 C++】第1题 为什么优先使用构造函数的初始化列表

1.首先看一个例子: #include<iostream> using namespace std; class Test1 { public: Test1() // 无参构造函数 { cout << "Construct Test1" << endl ; } Test1(const Test1& t1) // 拷贝构造函数 { cout << "Copy constructor for Test1" <

构造函数和初始化列表

区别: 对于在函数体中(构造函数)初始化,是在所有的数据成员被分配内存空间后才进行的. 列表初始化是给数据成员分配内存空间时就进行初始化,就是说分配一个数据成员只要冒号后有此数据成员的赋值表达式(此表达式必须是括号赋值表达式),那么分配了内存空间后在进入函数体之前给数据成员赋值,就是说初始化这个数据成员此时函数体还未执行. 在我们使用初始化列表进行初始化时,它是关于C++初始化类成员的.它们是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序. 三种类型必须通过初始化列表来初始化  常量

c++构造函数的初始化列表(翁恺c++公开课[13])

初始化列表形式: class Point { private: const float x,y; Point(float xa = 0.0, flato ya = 0.0):y(ya),x(xa) {} }; y(ya),x(xa)就是初始化列表的形式,而且是在构造函数被调用之前运行: 从此以后要用这种方式写构造函数的初始化. 原文地址:https://www.cnblogs.com/go-ahead-wsg/p/12210663.html

【C/C++】构造函数、默认构造函数、成员初始化列表

常见问题 Q1. 下列关于构造函数的描述中,错误的是( ) A. 构造函数可以设置默认的参数 B. 构造函数在定义类对象时自动执行 C. 构造函数可以是内联函数 D. 构造函数不可以重载 Q2. 下列代码中a.b的各个成员变量值是多少? 1 class Student 2 { 3 public: 4 Student() {} 5 void show(); 6 private: 7 string name; 8 int number; 9 int score; 10 }; 11 Student a

C++ Primer 学习笔记_19_类与数据抽象(5)_初始化列表(const和引用成员)、拷贝构造函数

C++ Primer 学习笔记_19_类与数据抽象(5)_初始化列表(const和引用成员).拷贝构造函数  从概念上将,可以认为构造函数分为两个阶段执行: 1)初始化阶段: 2)普通的计算阶段.计算阶段由构造函数函数体中的所有语句组成. 一.构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 1.对象成员及其初始化 <span style="font-size:14px;">#include <iostream> using namespace std;