C++学习笔记-2-构造函数和析构函数

问题2. 什么时候执行构造函数和析构函数  22:59:40 2015-07-22

做了一个实验:

#include <iostream>
class Object{
public:
    Object(){
        printf("Create Object\n");
    };
    ~Object(){
        printf("Delete Object\n");
    }
};
void runObject(){
    Object obj;
    printf("runObject end\n");
}
int main(){
//    Object *obj=new Object();
//    delete obj;
    runObject();
    printf("end\n");
    return 0;
}

输出为:

Create Object
runObject end
Delete Object
end

在void  runObject()中加一个{}

#include <iostream>
class Object{
public:
    Object(){
        printf("Create Object\n");
    };
    ~Object(){
        printf("Delete Object\n");
    }
};
void runObject(){
    {
        Object obj;
    }
    printf("runObject end\n");
}
int main(){
//    Object *obj=new Object();
//    delete obj;
    runObject();
    printf("end\n");
    return 0;
}

输出为:

Create Object
Delete Object
runObject end
end

时间: 2024-08-06 16:24:50

C++学习笔记-2-构造函数和析构函数的相关文章

C++学习笔记25,永远将析构函数声明为virtual

要永远记得将析构函数声明为virtual----><<effective c++>> 或许你觉得这句话不一定对,但无需质疑的是这句话是很有用的. 查看下面的例子: #include <iostream> #include <string> using namespace std; class B{ public: ~B(){ cout<<"base is destroyed!"<<endl; } }; cla

C++学习之类的构造函数、析构函数

在C++的类中,都会有一个或多个构造函数.一个析构函数.一个赋值运算操作符.即使我们自己定义的类中,没有显示定义它们,编译器也会声明一个默认构造函数.一个析构函数和一个赋值运算操作符.例如: 1 //声明一个空类 2 class Empty{}; 3 4 //但是这个空类和下面这个类是等同的 5 class Empty 6 { 7 Empty(){.....}; //默认构造函数 8 Empty( const Empty & rhs ){......} //复制构造函数 9 ~Empty(){.

PHP学习笔记十九【析构函数】

<?php class Person{ public $name; public $age; public function __construct($iname,$iage) { $this->name=$iname; $this->age=$iage; } //定义一个析构函数 两个下划线 ,析构函数在对象被释放的时候会自动调用 //最先被创建最后被销毁,因为是放入栈中,栈是先进后出 //析构函数调用的时机 //1.当程序(进程结束)退出时 //2.当一个对象成为垃圾对象(没有任何变

java学习笔记之-构造函数

目的: 数据的初始化是非常重要的,未经初始化的数据很多情况下都不是期望的结果,很多忘记初始化的数据是导致错误的根源.构造函数就是提供了一个初始化的地方,可以把初始化数据的代码写在构造函数里.当然允许你可以不写在构造函数里,可以自定义一个方法再去调用,不过构造函数的方便之处在于只要创建了对象,就会自动地调用构造函数,保证不会忘记调用.这才是使用构造函数的根本目的.如果有一些特殊情况,比如创建对象的时候初始化会带来性能问题,比如连接数据库等耗时的操作,是不必在构造函数内写数据库的初始化代码的.代码都

c++学习笔记5,多重继承中派生类的构造函数与析构函数的调用顺序(二)

现在来测试一下在多重继承,虚继承,MI继承中虚继承中构造函数的调用情况. 先来测试一些普通的多重继承.其实这个是显而易见的. 测试代码: //测试多重继承中派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; }

《C++ Primer Plus》10.3 类的构造函数和析构函数 学习笔记

10.3.1 声明和定义构造函数构造函数原型:// constructor prototype with some default argumentsStock(const string &co, long n = 0, double pr = 0.0);构造函数定义:// constructor definitionStock::Stock(const string & co, long n, double pr){    company = co;    if (n < 0)  

C++ Primer 学习笔记_18_类与数据抽象(4)_构造函数、析构函数、explicit关键字、赋值与初始化、类成员的显式初始化

引言: 构造函数确保每个对象在创建时自动调用,以确保每个对象的数据成员都有合适的初始值. 一.构造函数.默认构造函数 1.构造函数 --构造函数是特殊的成员函数 --构造函数是为了保证对象的每个数据成员都被正确初始化 --函数名和类名完全相同 --不能定义构造函数的类型(返回类型),也不能使用void --通常情况下构造函数应声明为公有函数,一般被隐式地调用. --构造函数被声明为私有有特殊的用途,比如单例模式. (1).构造函数可以被重载 一般而言,不同的构造函数允许用户指定不同的方式来初始化

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

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

C++ Primer 学习笔记_55_类与数据抽象 --析构函数

复制控制 --析构函数 引言: 在构造函数中分配了资源之后,需要一个对应操作自动回收或释放资源.析构函数就是这样的一个特殊函数,它可以完成所需的资源回收,作为类构造函数的补充. 1.何时调用析构函数 撤销类对象时会自动调用析构函数: Sales_item *p = new Sales_item; { Sales_item item(*p); //调用复制构造函数 delete p; //调用指针p的析构函数 } //调用对象item的析构函数 动态分配的对象只有在指向该对象的指针被删除时才撤销,

C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数、抽象类、虚析构函数、动态创建对象

C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数.抽象类.虚析构函数.动态创建对象 一.纯虚函数 1.虚函数是实现多态性的前提 需要在基类中定义共同的接口 接口要定义为虚函数 2.如果基类的接口没办法实现怎么办? 如形状类Shape 解决方法 将这些接口定义为纯虚函数 3.在基类中不能给出有意义的虚函数定义,这时可以把它声明成纯虚函数,把它的定义留给派生类来做 4.定义纯虚函数: class <类名> { virtual <类型> <函