私は学生で、私は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が呼び出されると、コンストラクタとデストラクタが1つずつ表示されるはずですが、それはもう1つのデコンストラクタを与えます。したがって、2つのデストラクタに対して1つのコンストラクタがあります。
あなたにもコピーコンストラクタプリントを持っている必要があります。 – NathanOliver
ただのFYI:コンストラクタは単一の 'int'引数を取っていますが、実際にはC++の用語を使った* explicit *ではありません。 –
私は他の誰かが決定的な答えを出すようにするつもりですが、あなたが見ていることは 'test :: foo'内の' rez'が破壊されていること、そして 'rez.foo(t1 、t2) '破壊されている – Hill