【发布时间】:2017-12-07 22:46:12
【问题描述】:
运行以下代码时:
struct Copy
{
Copy() {std::cerr << __PRETTY_FUNCTION__ << std::endl;}
Copy(const Copy & other) {std::cerr << __PRETTY_FUNCTION__ << std::endl;}
Copy & operator=(const Copy & other) {std::cerr << __PRETTY_FUNCTION__ << std::endl; return *this;}
Copy(Copy && other) {std::cerr << __PRETTY_FUNCTION__ << std::endl;}
Copy & operator=(Copy && other) {std::cerr << __PRETTY_FUNCTION__ << std::endl; return *this;}
~Copy() {std::cerr << __PRETTY_FUNCTION__ << std::endl;}
};
char buffer[1024];
template <typename Type>
Type * push(Type value)
{
return new(buffer) Type(std::move(value));
};
int main()
{
push(Copy());
return 0;
}
我得到以下输出:
Copy::Copy()
Copy::Copy(Copy &&)
Copy::~Copy()
有没有办法省略移动构造函数?
我希望使用 -O3 可以就地构建它,但根据我的测试,情况似乎并非如此。
【问题讨论】:
标签: c++ copy-elision