我是一名学生,我正在学习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时,我应该看到一个构造函数和一个析构函数,但它给了我一个解构函数,所以我有一个构造函数用于两个析构函数。
答案 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
}