2 qq 27994711 qq_27994711 于 2016.04.19 09:59 提问

类对象做函数参数,结束后,调用析构函数么
c++

类对象作为函数参数,当函数结束时,作为参数的类对象撤销么?是否调用析构函数。

2个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.19 10:07
已采纳

如果不是引用传递的话,会调用析构函数(要注意重复delete的问题)

ruguokeyi317
ruguokeyi317   2016.04.19 10:17

不会。对象也可以作为函数的参数传递给函数,其转递方法与传递其他类型的数据一样,可采用值传递和地址传递两种方法。

值传递时是把对象的拷贝而不是本身传递给函数,函数中对参数对象的任何修改都不会影响调用该函数的对象本身;

而地址传递时,调用该函数的对象与参数对象共用同一个地址,所以,函数对参数对象的任何修改都会影响调用该函数的对象本身。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
c++中类对象直接作为函数参数所引起的问题。
这两天在写一个视频转换的程序,将H263/264编码的视频封装成mov格式,用c++实现。 Wiki上说Apple的mov格式是典型的over engineering,设计的非常复杂,各种信息使用atom原子封装,一个atom里面递归地嵌套着另外一个atom,atom的种类有几十种之多,用类实现是再好不过了。 发完牢骚了,言归正传,以前没怎么做过c++的东西,或者更本质地说,没怎么写过面向对象
C++ 学习笔记 (7) 对象析构之后, 指针 delete 之后,还可以调用成员函数
2018.5.8 记录一个之前从没遇到的现象: 1. 一个对象指针,分配了内存之后,显式调用析构,竟然可以调用几次,还可以正常访问对象的成员。 2. 在 1 现象之后,delete 对象,不可以访问数据成员了,但是指针(甚至置为 nullptr )还可以调用对象的静态函数和(没访问数据成员)的普通成员函数 最近学习了 operator new , placement new 和 opera
笔记,c++中静态对象在程序结束的时候会不会进析构函数?
1.在栈上的静态对象会进入析构函数。 void func() { static classA a; } 2.在堆上的静态对象不会进入析构函数。 void func() { static classA* pA = new classA; }
C++中对象作为函数形参,返回值时,构造函数,复制构造函数,析构函数的调用顺序(1)
近来做到几个关于对象作为函数形参,返回值时,构造函数,复制构造函数,析构函数的调用顺序的问题,于是研究了一下,发现问题似乎还有些麻烦,现在在此分享下: 问题一: •对象参数的传递方式 •通过运行栈来传递 •主调函数调用拷贝构造函数,在运行栈的传参区域上创建对象 •被调函数可以读取传参区域上的对象 class A{ int x; public: ~A( ){cout<<"C"
关于基类和派生类的构造函数和析构函数的执行顺序问题
C++ 派生类的析构函数的调用顺序为: A)  基类、派生类和对象成员类的析构函数  B)  派生类、对象成员类和基类的析构函数  C)  对象成员类、派生类和基类的析构函数     D)  派生类、基类和对象成员类的析构函数 答案是选着B, 关于派生类构造函数与基类构造函数的调用顺序问题,我们先看一下书上的说法:     《面向对象程序设计基础(第二版》李师贤等,第254页
析构函数 当类中的方法执行完毕之后或是被销毁之后执行的方法
void__destruct (void ) PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。 Example #2 析构函数示例 <?php class MyDestructableClass { function __construct() { print "In c
建立不同类型对象时,构造函数和析构函数的调用顺序
头文件 #ifndef CONS_DES_H #define CONS_DES_H #include class base { public: base(int); ~base(); private: int data; }; #endif 隐藏源文件: #include "cons_des.h" #include base::base(int value):data(
析构函数的调用顺序
析构函数做最后的“清场工作”, 一般当派生类对象从内存中撤销时,先调用派生类的析构函数,再调用基类析构函数; 但,若用new建立了临时对象,在用delete撤销对象是,系统会只执行基类的析构函数,而不执行派生类的析构函数。 如果将基类的析构函数声明为虚函数,由基类所有派生类的析构函数自动成为虚函数(即使析构函数名不同)。 将析构函数加上vitual,实现具体对象的 动态关联
C++析构函数的自动调用问题
首先要明确一点,系统只会自动释放栈内空间,而堆内空间需要用户自己维护。 C++中,除了new来的空间存放在堆内,其他均存放在栈中。 当单纯的创建对象的时候,对象存放在栈中,此时在程序块的}后面,系统会自动调用析构函数,释放掉栈空间。 但是,如果创建了指向new来的一块空间的指针的时候,如果在没有显示释放掉new到的堆空间时,系统是不会自动调用析构函数去释放栈空间中的指针的。
类对象作为函数参数
网上看见一段代码,是关于类对象作为函数的参数,其中有几点知识,贴出来大家一起学习。 直接来看代码: #include #include using namespace std; class people { private: char *name; int age; public: people(char *namestr,int i); ~people(); char *