10

A(3)「Here」が印刷される前に一時的なものを破棄すべきではありませんか?

#include <iostream>
struct A
{
    int a;
    A() { std::cout << "A()" << std::endl; }
    A(int a) : a(a) { std::cout << "A(" << a << ")" << std::endl; }
    ~A() { std::cout << "~A() " << a << '\n'; }
};

int main()
{
    A a[2] = { A(1), A(2) }, A(3);
    std::cout << "Here" << '\n';
}

出力:

A(1)
A(2)
A(3)
Here
~A() 3
~A() 2
~A() 1

実際の例

4

2 に答える 2

13

A(3)は一時オブジェクトではなく、 というタイプのオブジェクトAですA。これは次と同じロジックです。

A a[2] = { A(1), A(2) }, a2(3);

私は実際にあなたがそれをすることを許されていることを知りませんでした.

于 2015-10-18T22:33:50.020 に答える