[c++]怎么样知道析构函数先后的析构顺序

#include<iostream>
#include<string.h>
using namespace std;
class String_date
{
private:
    char * str;
public:
    String_date(char * str);
    ~String_date();
    char* get_infor()
    {return str;}
};
String_date::String_date(char* s)
{
    cout<<"constructing:"<<endl;
    str = new char [strlen(s) + 1];
    strcpy(str,s);
}
String_date::~String_date()
{
    delete str;
    cout<<"destructing:"<<str<<endl;//只要在析构函数中加入有效的打印语句就可以辨别
}
int main()
{
    String_date str1("teacher");
    String_date str2("student");
    cout<<str1.get_infor()<<endl;
    return 0;
}

运行结果:

时间: 2024-11-05 22:31:43

[c++]怎么样知道析构函数先后的析构顺序的相关文章

再探Delphi2010 Class的构造和析构顺序

发了上一篇博客.盒子上有朋友认为Class的构造和析构延迟加载.是在Unit的初始化后调用的Class的构造.在Unit的反初始化前调用的Class的析构函数. 为了证明一下我又做了个试验 unit Unit2; interface Type  TClassTest = class    class constructor create();    class destructor destory();  end; implementationuses  Windows; { TClassTes

c++中对象析构顺序研究

过程式析构: 测试案例:test.cpp #include <iostream> using namespace std; class Test { public: Test(int dt=0){data=dt;} ~Test(){cout<<data<<endl;} private: int data; }; int w(void) { Test b(7); Test c(8); } int main(int argc,char **argv) { Test a(0)

C++ 类成员的构造和析构顺序

我想对面向对象有了解的童鞋应该不会对类和对象感到陌生吧 ! 对象并不是突然建立起来的,创建对象必须时必须同时创建父类以及包含于其中的对象.C++遵循如下的创建顺序: (1)如果某个类具体基类,执行基类的默认构造函数. (2)类的非静态数据成员,按照声明的顺序创建. (3)执行该类的构造函数. 即构造类时,会先构造其父类,然后创建类成员,最后调用本身的构造函数. 下面看一个例子吧 class c { public: c(){ printf("c\n"); } protected: pri

继承的构造和析构顺序

程序示例 1 #include <iostream> 2 using namespace std; 3 class a 4 { 5 public: 6 a(){cout<<"构造a"<<endl;} 7 ~a(){cout<<"析构a"<<endl;} 8 }; 9 class b 10 { 11 public: 12 b(){cout<<"构造b"<<endl;

C++继承中析构函数 构造函数的调用顺序以及虚析构函数

首先说说构造函数.大家都知道构造函数里就能够调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就能够调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数,仅仅有这样子类才干在构造函数里使用基类的成员,所以是创建子类时先调用基类的构造函数然后再调用自己的构造函数.通俗点说,你要用某些物品.但这些物品你没办法自己生产,自然就要等别人生产出来,你才干拿来用. 接着就是析构函数了,上面说到子类是将基类的成员变成自己的成员,那么基类就会仅仅存在子类中直到子类调

[转载]析构函数的虚析构和非虚析构调用的差别

代码示例: 非虚析构的情况下. #include <stdio.h> #include <iostream> using namespace std; class A { public: A() { std::cout << "A is created." << std::endl; } ~A() { std::cout << "A is deleted." << std::endl; } };

c++之——派生类的同名成员和函数调用方式及构造析构顺序

1 #include<iostream> 2 using namespace std; 3 class Object { 4 public: 5 Object(int test) :a(1), b(2), c(3) { cout << "object 构造\n"; } 6 ~Object() 7 { 8 cout << "object 析构\n"; 9 } 10 int a; 11 int b; 12 int c; 13 void

c++构造函数析构函数调用顺序

1 #include <iostream> 2 using namespace std; 3 class A 4 { 5 public: 6 A () 7 { 8 cout<<"A 构造 "<<endl; 9 } 10 virtual ~A() // 定义虚析构函数 导致原来析构顺序发生变化 11 { 12 cout<<"A 析构 "<<endl; 13 } 14 15 }; 16 class B : pu

继承的构造和析构

思考问题:如何初始化父类成员?父类构造函数和子类构造函数有什么关系呢? 子类对象的构造 子类中可方式以定义构造函数 子类构造函数必须对继承而来的成员进行初始化: 1)直接通过初始化列表或者赋值的方式进行初始化 2)调用父类构造函数进行初始化 父类构造函数在子类中的调用方式 默认调用:适用于无参构造函数和使用默认参数的构造函数 显示调用:通过初始化列表进行调用,适用于所有父类构造函数 如果子类没有显示调用,那么在父类中需要有无参构造函数 class Child : public Parent {