C++ 缺少预期的对象构造
请参阅带有注释的行。我所期望的是在那里构造一个temp对象,操作符=中的参数Other将从该temp对象构造move。这里发生了什么?表示“已构造”的输出实际上是来自临时对象构造的反馈C++ 缺少预期的对象构造,c++,c++11,C++,C++11,请参阅带有注释的行。我所期望的是在那里构造一个temp对象,操作符=中的参数Other将从该temp对象构造move。这里发生了什么?表示“已构造”的输出实际上是来自临时对象构造的反馈 如果您正在寻找copy assignment操作符的Other参数的附加复制构造(或移动构造),它可能已被复制省略所消除。您的A(L“Name”)立即被构造并用作该其他参数。不会执行额外的复制(或移动)。您可以使用交互式调试器自己查看。但是,您对“名称”的构造位置的回答是: Empty constructed.
如果您正在寻找copy assignment操作符的
Other
参数的附加复制构造(或移动构造),它可能已被复制省略所消除。您的A(L“Name”)
立即被构造并用作该其他
参数。不会执行额外的复制(或移动)。您可以使用交互式调试器自己查看。但是,您对“名称”的构造位置的回答是:
Empty constructed.
Constructed.
Assignment.
Destroyed:
Destroyed: Name
您的代码在代码行A处构造了一个空对象代码>
然后它构造了“名称”
然后,它交换了两人的CString m_名称代码>(由输出赋值显示)
然后,它销毁了保存“Name”(A(L“Name”)
)的原始对象
然后它破坏了原来的空对象,现在它的m_Name
中保存着“Name”。是的,这里发生了什么。在标准中,它说这样的事情可以在哪里实现?我认为复制省略只是一个整洁的编译器技巧,而不是标准中提到的/要求的东西?顺便说一句,我相信我是在关闭优化的情况下编译的。我的评论是关于在标准中它在何处规定了复制省略可能会产生明显的副作用,这在重复问题中得到了回答。
Empty constructed.
Constructed.
Assignment.
Destroyed:
Destroyed: Name
A (LPCWSTR Name)
: m_Name(Name)
{
wcout << L"Constructed." << endl;
}
a = A(L"Name");