C++函数返回值为对象时,构造析构函数的执行细节_C 语言

看如下代码:

复制代码 代码如下:

#include<iostream>
class TestConstructor
{
public:
    TestConstructor()
    {
        std::cout<<"TestConstructor()"<<std::endl;
    }
    ~TestConstructor()
    {
        std::cout<<"~TestConstructor()"<<std::endl;
    }
    TestConstructor(const TestConstructor& testObj)
    {
        std::cout<<"TestConstructor(const TestConstructor&)"<<std::endl;
    }
    TestConstructor& operator = (const TestConstructor& testObj)
    {
        std::cout<<"TestConstructor& operator = (const TestConstructor& testObj)"<<std::endl;
        return *this;
    }
};
TestConstructor testFunc()
{
    TestConstructor testInFunc;  //3、调用TestConstructor() 生成对象testInFunc
    return testInFunc;           //4、调用TestConstructor(const TestConstructor&) 生成临时对象
                                 //5、调用析构函数,析构对象testInFunc
}
int main()
{
    TestConstructor test;  //1、调用TestConstructor() 生成对象test
    test = testFunc();     //2、调用testFunc()    //6、调用等号把临时对象复制给对象test  //7、调用析构函数,析构临时对象
    return 0;              //8、调用析构函数,析构对象test
}

看输出:

有注释,有输出。执行细节,一目了然了吧

 

 

时间: 2024-07-31 01:29:50

C++函数返回值为对象时,构造析构函数的执行细节_C 语言的相关文章

C++返回值为对象时复制构造函数不执行怎么破

先说点背景知识,调用复制构造函数的三种情况: 1.当用类一个对象去初始化另一个对象时. 2.如果函数形参是类对象. 3.如果函数返回值是类对象,函数执行完成返回调用时. 在辅导学生上机时,有同学第3点提出异议.有教材上的例题为证: #include <iostream> using namespace std; class Point //Point 类的定义 { public: Point(int xx=0, int yy=0) { x = xx; //构造函数,内联 y = yy; } P

C++指针作为函数的参数进行传递时需要注意的一些问题_C 语言

只有在被调函数中,对指针进行引用操作,才可以达到不需要返回值,就对指针指向的变量做出相应的变化. 下面分析这样两个例子; 要求:定义并初始化两个字符串变量,并执行输出操作:然后调用函数使这两个变量的值交换,并且要求被调函数的传值通过传递指针来实现. 程序1.1 复制代码 代码如下: #include<iostream>#include<string>using namespace std;int main(){   string str1="I love China!&q

c++-在写函数时 是不是要把返回值都放在形参表里?把函数返回值设定为true/false?

问题描述 在写函数时 是不是要把返回值都放在形参表里?把函数返回值设定为true/false? 在写函数时 是不是要把返回值都放在形参表里?把函数返回值设定为true/false? 解决方案 主要还是看程序需要把,这种想法只是对于一些内存申请操作来说,函数在结束后就将函数内申请的控件释放.如果已经在外部申请好了内存,是可以当做返回值返回的.所以说并不一定就要把返回值放在形参表里. 解决方案二: 这也是一种方式,尤其对于要返回多个结果的时候,一般通过参数来传递结果.然后函数返回值来表示函数是否调用

函数返回值是否使用引用类型的问题:理解引用、返回值

在<对象更有用的玻璃罩--常引用>一文中,介绍了对象作为函数的参数时,推荐使用引用的形式.并且,如果实际参数的值不允许改变时,声明为常引用更佳. 在<第8周-任务1-方案3-复数类中运算符重载(与实数运算)>中,又讨论了一个问题,结论是:在类似复数加法运算符重载这样的函数,形式参数用作为常引用最佳,如: friend Complex operator + (const Complex &c, const double &d); friend Complex oper

为什么 MySQL 中 GROUP_CONCAT 函数返回 BLOB 大对象类型?(Why GROUP_CONCAT returns BLOB?)

为什么 MySQL 中 GROUP_CONCAT 函数返回 BLOB 大对象类型?(Why GROUP_CONCAT returns BLOB?) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作.

《C++面向对象高效编程(第2版)》——3.15 函数返回值

3.15 函数返回值 C++面向对象高效编程(第2版)许多函数向主调函数返回值.引用或指针.要正确和高效地使用它们,必须先理解它们的含义.可能有以下几种模式返回: T X::f(); // 按值返回T T* X::f(); // 返回T类对象的指针/地址 const T* X::f(); // 返回指向const T类对象的指针 T& X::f(); // 返回对T对象的引用 const T& X::f(); // 返回对const T类对象的引用``` (1)绝不返回对局部变量的引用(或

c++函数返回值是数组问题

问题描述 c++函数返回值是数组问题 比如现在要求定义一个函数fun(),在主函数调用时直接用fun():就能输出在fun函数里定义好的一个字符串,那要fun函数的返回值怎么返回才行,为什么我返回指针但打印出来却不是正确结果?求大神解释 解决方案 一般来说,出于内存管理的需要,让主程序来分配内存,传指针.比如scanf函数,就是通过这个方式输入值. 比如 void getstr(char * buffer) { char str[] = "hello world"; strcpy(bu

python读取oracle函数返回值_python

在oracle中创建一个函数,本来是想返回一个index table的,没有成功.想到文本也可以传输信息,就突然来了灵感,把返回值设置文本格式. 考虑到返回数据量可能会很大,varchar2类型长度吃紧,于是将返回值类型设置为clob.  我是用scott用户的测试表emp,这个是函数定义情况: create or replace function test_query_func(dept varchar2) return clob is type test_record is record (

android 或java函数返回值,应该如何写才对

问题描述 android 或java函数返回值,应该如何写才对 下面是我遇到的问题: 解决方案 你这样肯定不行:你在你的这个方法里面注册来一个检测器来获取你需要的string,其中的onListDepartment()方法应该只会在你的getDepartmentName 方法只会才会调用,所以你的strDepartmentNameText应该时没有更新的.所以,想要得到strDepartmentNameText方法很多呀,比如在onListDepartment()方法直接使用,或者使用handl