返回类析构函数

时间:2016-05-24 14:45:27

标签: c++ class destructor

我是一名学生,我正在学习C ++。我擅长C ++仍然很简单"事情让我纠缠不清。我最近学过类,方法,构造函数/解构函数,继承,虚拟等。我有这段代码:

#include <iostream>
using namespace std;

class test {
    int a, c;
public:
    test() { cout << "Constructor\n"; }
    test(int a) :a(a) { cout<<"Explicit Constructor\n"; }
    test foo(const test&, const test&);
    ~test() { cout << "DECONSTRUCTOR!\n"; }
};

test test::foo(const test &t1, const test &t2) {
    test rez;
    rez.c = t1.a + t2.a;
    return rez;
}

void main() {
    test t1(5), t2(21), rez;
    rez.foo(t1, t2);
    cin.ignore();
}

我知道在foo中我创建了一个在超出范围时被删除的本地类。因此,当调用foo时,我应该看到一个构造函数和一个析构函数,但它给了我一个解构函数,所以我有一个构造函数用于两个析构函数。

3 个答案:

答案 0 :(得分:2)

class test中添加一个方法:

test(test const &) { cout << "Copy constructor" << endl; }

看看会发生什么。

答案 1 :(得分:0)

您忘记了实施复制构造函数:

test(const test &rhs)
{
  cout << "Constructor";
}

用于将rez对象复制回foo

的来电者

答案 2 :(得分:0)

参考评论:

test test::foo(const test &t1, const test &t2) {
    test rez;
    // constructor for rez invoked
    rez.c = t1.a + t2.a;
    return rez;
    // destructor for rez invoked
}

void main() {
    test t1(5), t2(21), rez;
    // 3 constructor invocations
    rez.foo(t1, t2);
    // constructor for return value is called
    // but you are missing it since you did not implement copy constructor
    // destructor for return value is called
    // as you did not use it
    cin.ignore();
    // 3 destructor invocations
}