当前位置:  开发笔记 > 编程语言 > 正文

当我调用一个简单的函数时,析构函数会被调用

如何解决《当我调用一个简单的函数时,析构函数会被调用》经验,为你挑选了1个好方法。

我做了一个简单的程序制作一个类,它是3个对象.我重载了=,+ =和<<运算符.问题是当我使用=和+ =运算符时,在执行函数后调用析构函数.

据我所知,当对象超出范围或使用"删除"运算符时,将调用析构函数.但是,就我而言,这两者都不是.我查看了一些其他网站,比如官方C++网站,但是,我无法得到答案.这是我写的代码.

#include
using namespace std;

class Class
{
    int flag,name;
public:
    Class(int y,int z)
{
    flag=y;
    name=z;
}

    Class& operator=(Class);
    Class operator+=(Class);
    friend ostream& operator<<(ostream&,Class&);    

    ~Class()
{
    cout<<"Destroying "<

我得到的输出是这样的:

8090100
Destroying 2
Destroying 3
100100100
Destroying 1
Destroying 2
200100200
Destroying 3
Destroying 2
Destroying 1

C2,C3和C1,C2的析构函数在此过程中被调用,即使它们不在范围之外.我通过更改函数名称甚至将返回类型更改为'void'来尝试此程序,但仍然会调用析构函数.我在GCC-4.9.3中编译了这个程序.

我很感激这个主题的任何帮助,如果我的问题太愚蠢,请原谅我.



1> TartanLlama..:

您的运算符按值获取参数,生成一个在函数结束时将被销毁的副本.

如果您不想创建副本,请通过const引用获取参数.正如interjay所指出的,operator+=还应该返回一个引用而不是复制*this:

Class& operator=(const Class&);
Class& operator+=(const Class&);


`operator + =`还应返回一个引用,以避免创建另一个副本.
推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有