【发布时间】:2015-01-02 13:37:51
【问题描述】:
我写了下面的课程,我有一个问题。函数sayHello() 返回一个在该行之后将被销毁的对象。但是,它不使用移动构造函数。它不是右值引用吗?为什么不使用移动构造函数?
class FString {
private:
char *ptr;
public:
FString() : ptr(nullptr) {}
FString(const char *str) {
cout << "Called: FString(const char *str)\n";
//...
}
~FString() {
cout << "Called: ~FString()\n";
//...
}
FString(FString &&s) {
cout << "Called: FString(FString &&s)\n";
//...
}
};
FString sayHello() {
FString s("Hello World!");
return s;
}
int main() {
FString s("Hello World!");
FString s2(sayHello());
return 0;
}
输出:
Called: FString(const char *str)
Called: FString(const char *str)
Called: ~FString()
Called: ~FString()
谢谢。
【问题讨论】:
标签: c++ c++11 move-semantics