cur*_*y12 4 c++ constructor c++11
根据有关委托构造函数的问题,当第一个构造函数完成时,将调用析构函数。
\n这与下面的代码是一致的:
struct test {\n test() { std::cout << "default constr\\n"; }\n test(int) : test() { std::cout << "argument constr\\n"; throw int{}; }\n ~test() { std::cout << "destr\\n"; }\n};\n\nint main()\n{\n try {\n test t{3};\n } catch(...)\n {\n std::cout << "caught\\n";\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n输出:
\ndefault constr\nargument constr\ndestr\ncaught\nRun Code Online (Sandbox Code Playgroud)\n但是,Stroustrup 在他的书中(第 4 版,第 503 页)说了以下内容:
\n\n\n在对象的构造函数完成之前,对象不会被视为已构造 (...)。使用委托构造函数时,在委托构造函数完成\xe2\x80\x93 之前,对象不会被视为已构造,仅完成委托构造函数是不够的。除非其原始构造函数完成,否则不会为对象调用析构函数。\n
\n
是我误读了还是他有别的意思?
\n| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |