我跑在開發Studio 2010中下面的代碼:奇怪的C++涉及多個調用行爲,析構函數
struct Foo
{
Foo() {cout << "Foo()" << endl;}
~Foo() {cout << "~Foo()" << endl;}
void operator()(const int &) const {}
};
int bar[] = {0};
for_each(begin(bar), end(bar), Foo());
輸出是不是我所期待的,是在這兩個調試相同,不管釋放「扎」數組的內容:
Foo()
~Foo()
~Foo()
~Foo()
我已經看過了輸出組件,我不能爲我的生活理解,爲什麼編譯器生成的析構函數額外要求。任何人都可以向我解釋究竟發生了什麼?
加上' Foo(const Foo&){cout <<「Foo(const Foo&)」<< endl;}'並嘗試它。 – 2012-04-02 03:52:12
如果您在構造函數中放置打印件,最好也爲所有編譯器生成的方法執行打印。查看對3/5規則的引用以獲取編譯器生成的方法。 – 2012-04-02 05:14:19