21xrx.com
2024-09-20 00:53:27 Friday
登录
文章检索 我的文章 写文章
C++ 构造函数和析构函数的调用时机
2023-06-27 13:51:55 深夜i     --     --
C++ 构造函数 析构函数 调用时机

C++是一种面向对象的编程语言,它具有许多独特的特性,其中包括构造函数和析构函数。构造函数和析构函数是类中最基本的函数,它们分别用于对象的初始化和销毁。在本文中,我们将探讨C++构造函数和析构函数的调用时机。

1. 构造函数的调用时机

构造函数是在对象创建时自动调用的函数,它的主要目的是初始化对象的成员变量。C++中有三种方式来调用构造函数:

1.1 默认构造函数

默认构造函数是不带参数的构造函数,如果在创建对象的同时没有指定构造函数,那么默认构造函数将自动调用。例如,使用类名加括号的方式创建对象就默认调用了默认构造函数,如下所示:


class Person {

public:

  Person() { }

};

Person p;

1.2 带参数的构造函数

带参数的构造函数需要提供一些初始值来初始化对象的成员变量。我们可以在创建对象时使用构造函数的参数列表来传递参数值,如下所示:


class Person {

public:

  Person(string name, int age)

    mName = name; // 初始化成员变量

    mAge = age;

 

private:

  string mName;

  int mAge;

};

Person p("Tom", 18);

1.3 类型转换构造函数

类型转换构造函数是一种特殊的构造函数,它将一个类型转换为另一个类型。这种构造函数会被自动调用,例如使用一个对象来初始化另一个对象时,如下所示:


class Person {

public:

  Person(int age)

    mAge = age;

 

private:

  int mAge;

};

Person p1(18);

Person p2 = p1; // 类型转换构造函数被自动调用

2. 析构函数的调用时机

析构函数在对象被销毁时自动调用,它的主要目的是清理对象创建时分配的资源。C++中有两种方式来调用析构函数:

2.1 自动调用

当对象超出其范围时,析构函数会自动调用。例如,在函数中创建的局部对象在函数执行完后会自动被销毁,析构函数也会随之自动调用,如下所示:


void func()

  Person p;

  // do something

// p超出了其作用域,析构函数被自动调用

2.2 手动调用

有时候我们需要手动调用一个对象的析构函数,这通常用于释放对象的动态分配的资源,例如使用new关键字动态分配内存,手动调用析构函数后再使用delete关键字释放内存,如下所示:


void func() {

  Person* p = new Person;

  // do something

  delete p; // 手动调用析构函数

}

总结

本文讨论了C++构造函数和析构函数的调用时机。构造函数是在创建对象时自动调用的函数,它的主要目的是初始化对象的成员变量。析构函数在对象被销毁时自动调用,它的主要目的是清理对象创建时分配的资源。我们可以使用默认构造函数、带参数的构造函数和类型转换构造函数来调用构造函数。析构函数会自动调用,也可以手动调用。了解这些知识对于C++编程非常重要,可以帮助我们更好地理解和掌握C++面向对象编程的精髓。

  
  
下一篇: C和C++的区别

评论区

{{item['qq_nickname']}}
()
回复
回复