构造 & 析构 & 匿名对象‍

?以前仅知道创建对象,但对匿名对象的了解基本为0。

通过阅读google chromium源代码 中关于 log 的使用,查阅相关资料,了解了一下匿名对象,予以记录。

什么是匿名对象?

匿名对象可以理解为是一个临时对象,一般系统自动生成的,如你的函数返回一个对象,这个对象在返回时会生成一个临时对象。

#include <iostream>

class myclass {
public:
  myclass()
  {
    std::cout << "构造函数" << std::endl;
  }
  ~myclass()
  {
    std::cout << "析构函数" << std::endl;
  }
};

void playStage() {

myclass();                 /*在执行此代码时,利用构造函数生成了一个匿名myclass类对象;执行完此行代码,因为外部没有接此匿名对象的变量,此匿名又被析构了*/

myclass my= myclass();     /*在执行此代码时,利用构造函数生成了一个匿名myclass类对象;然后将此匿名变成了my这个实例对象,此匿名对象没有被析构。*/

std::cout<<"my 对象没有被析构"<<std::endl;

}


int main() {
  playStage();
  system("pause");
  return 0;
}

输出:

构造函数
析构函数
构造函数
my 对象没有被析构
析构函数
时间: 2024-11-03 02:09:10

构造 & 析构 & 匿名对象‍的相关文章

匿名对象,封装,构造代码块、静态代码块、内部类、匿名内部类

匿名对象:没有引用类型变量指向的对象就称为匿名对象. 匿名对象的主要作用:简化书写 匿名对象主要用于两种应用场景: 1.如果一个对象的方法只会调用一次的时候,然后该对象就不再使用了,这时候就可以使用匿名对象 2.作为参数传递 封装的步骤: 1.私有化要封装的属性 2.根据需求提供对应的get或set方法 封装的好处: 1.提高了数据的安全性 2.操作简单 3.隐藏了实现 封装一定会用上的场景:如果是实体类的属性,在开发过程中,全部都会封装起来 构造代码块:创建一个对象的时候,给对象进行统一的初始

JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块

JAVA之旅(四)--面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块 加油吧,节奏得快点了 1.概述 上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例 就拿买电脑来说吧,首先,你不懂电脑,你去电脑城买电脑,和大象装冰箱里一样,是什么步骤?咨询 砍价 ,谈妥了就那电脑走人,对吧,这就是面向过程的思想,而面向对象是:你有一个哥们,他懂电脑,什么都会,你只要带他去,就行,你这个哥们就是对象,在JAVA中,我们就是操作一个对象去完成各种各样的操作的,这就是面向对

Php面向对象学习笔记 – 构造、析构、对象赋值、克隆

Php面向对象学习笔记 – 构造.析构.对象赋值.克隆 class student { public  $stu_id;       // 定义成员变量 public  $stu_name; public  function sayName()   // 成员函数 { echo $this->stu_name;   // $this  访问该对象的成员变量 } } $stu = new  Student;      // 创建对象 $stu->stu_id = '0607001'; $stu-

Cpp下匿名对象探究

先来看看一段代码: #include "iostream" using namespace std; class ABCD { public: ABCD(int a, int b, int c) { this->a = a; this->b = b; this->c = c; printf("ABCD() construct, a:%d,b:%d,c:%d \n", this->a, this->b, this->c); } ~A

C++临时匿名对象

匿名对象:临时的对象,一般都是在构造完就被释放掉了(有特殊情况,返回值优化) 1. 返回值优化:若是函数返回的匿名对象返回时候有同类型的新对象接上,则该匿名对象被转化为新对象. #include "iostream" using namespace std; class A { public: A (int _a=0, int _b=0) { this->a1 = _a; this->b1 = _b; cout << "construct functi

this/super/static/final/匿名对象/继承/抽象类/访问权限修饰符

1.this关键字的作用     1)调用本类中的属性;     2)调用本类中的构造方法;且只能放首行,且必须留一个构造方法作为出口,即不能递归调用     3)表示当前对象; 2.匿名对象     直接new出来的对象,不创建变量名,且只能使用一次,通常作为方法的参数及返回值使用 3.继承     继承是面向对象的三大特征之一,通过关键字:extends实现,被继承的类称为父类(也称作基类/超类),实现继承的类称为子类(也称作派生类).     特点:     (1)通过继承,子类可以直接访

Effective C++笔记:构造/析构/赋值运算

条款05:了解C++默默编写并调用哪些函数 默认构造函数.拷贝构造函数.拷贝赋值函数.析构函数构成了一个类的脊梁,只有良好的处理这些函数的定义才能保证类的设计良好性. 当我们没有人为的定义上面的几个函数时,编译器会给我们构造默认的. 当成员变量里有const对象或引用类型时,编译器会不能合成默认的拷贝赋值函数:当一个基类把它的拷贝赋值函数定义为private时,它的派生类也不无生成默认的拷贝赋值函数,因为它无法完成基类成份的赋值. 条款06:若不想使用编译器自动生成的函数,就该明确拒绝 将拷贝构

《Effective C++》构造/析构/赋值 函数:条款5-条款9

每一个类中都有构造函数.析构函数.赋值操作符.这几个函数是一个类最根本的函数,它控制着创建对象并初始化.对象消亡时的清理以及摆脱旧值赋新值.这样函数如果有问题,那么影响极为严重. 条款5:了解C++默认编写并调用哪些函数 加入编写一个空类,那么经过编译之后,C++默认编写了哪些函数. class Empty{ }; 经过编译器处理后会有默认构造函数.复制构造函数.赋值操作符和析构函数.这些函数都是public且inline. class Empty{ public: Empty(){} Empt

【Effective C++】构造/析构/赋值运算

条款05:了解C++默默编写并调用哪些函数 默认构造函数.拷贝构造函数.拷贝赋值函数.析构函数构成了一个类的脊梁,只有良好的处理这些函数的定义才能保证类的设计良好性. 当我们没有人为的定义上面的几个函数时,编译器会给我们构造默认的. 当成员变量里有const对象或引用类型时,编译器会不能合成默认的拷贝赋值函数:当一个基类把它的拷贝赋值函数定义为private时,它的派生类也不无生成默认的拷贝赋值函数,因为它无法完成基类成份的赋值. 条款06:若不想使用编译器自动生成的函数,就该明确拒绝 将拷贝构