关于构造函数和析构函数的隐式调用

2024-04-15 13:48

本文主要是介绍关于构造函数和析构函数的隐式调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、首先是最基本的调用:

class Test
{
public:Test() {cout<<"default constructor"<<endl;}~Test() {cout<<"default destructor"<<endl;}Test(int i):a(i){cout<<"from copy"<<endl;}Test(const Test&) {cout<<"copy constructor"<<endl;}private:int a;
};
int main() {
Test t;
}
输出结果如下:

default constructor
default destructor

二、在形参值传递时的调用:

class Test
{
public:Test() {cout<<"default constructor"<<endl;}~Test() {cout<<"default destructor"<<endl;}Test(int i):a(i){cout<<"from copy"<<endl;}Test(const Test&) {cout<<"copy constructor"<<endl;}private:int a;
};void play(Test b)
{
}int main() {Test a;cout<<"********"<<endl;play(a);return 0;
}

结果:

default constructor
********
copy constructor
default destructor
default destructor

说明:将对象传递给函数时,将隐式调用复制构造函数。而这个创建的对象会在函数结束后销毁。
三、在用值来返回时的调用:

class Test
{
public:
Test() {cout<<"default constructor"<<this<<endl;}
~Test() {cout<<"default destructor"<<this<<endl;}
Test(int i):a(i){cout<<"from copy"<<endl;}
Test(const Test&) {cout<<"copy constructor"<<this<<endl;}
private:
int a;
};
Test play(Test b)
{
return b;
}
int main() {
Test a;
cout<<"********"<<endl;
play(a);
return 0;
}
结果:

default constructor0x28ff04
********
copy constructor0x28ff0c
copy constructor0x28ff08
default destructor0x28ff08
default destructor0x28ff0c
default destructor0x28ff04

说明:从函数返回对象时,会隐式调用复制构造函数,以及对应的析构函数。

四、隐式转化调用构造函数

class Test
{
public:Test() {cout<<"default constructor"<<this<<endl;}~Test() {cout<<"default destructor"<<this<<endl;}Test(int i):a(i){cout<<"from copy"<<endl;}Test(const Test&) {cout<<"copy constructor"<<this<<endl;}private:int a;
};void play(Test b)
{//return b;
}int main() {play(1);
结果:

from copy
default destructor0x28ff0c

五、隐式转换和隐式调用复制构造函数

class Test
{
public:Test() {cout<<"default constructor"<<this<<endl;}~Test() {cout<<"default destructor"<<this<<endl;}Test(int i):a(i){cout<<"from copy"<<endl;}Test(const Test&) {cout<<"copy constructor"<<this<<endl;}private:int a;
};Test play(Test b)
{return b;
}int main() {play(1);return 0;
}
结果:

from copy
copy constructor0x28ff08
default destructor0x28ff08
default destructor0x28ff0c


结论:当将对象传递给函数或从函数返回该类型对象时,将隐式使用复制构造函数。与每一个复制构造函数都有一个对应的析构函数。




这篇关于关于构造函数和析构函数的隐式调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/905984

相关文章

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

kotlin的函数forEach示例详解

《kotlin的函数forEach示例详解》在Kotlin中,forEach是一个高阶函数,用于遍历集合中的每个元素并对其执行指定的操作,它的核心特点是简洁、函数式,适用于需要遍历集合且无需返回值的场... 目录一、基本用法1️⃣ 遍历集合2️⃣ 遍历数组3️⃣ 遍历 Map二、与 for 循环的区别三、高

Vue 调用摄像头扫描条码功能实现代码

《Vue调用摄像头扫描条码功能实现代码》本文介绍了如何使用Vue.js和jsQR库来实现调用摄像头并扫描条码的功能,通过安装依赖、获取摄像头视频流、解析条码等步骤,实现了从开始扫描到停止扫描的完整流... 目录实现步骤:代码实现1. 安装依赖2. vue 页面代码功能说明注意事项以下是一个基于 Vue.js

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音