【发布时间】:2018-04-20 11:53:42
【问题描述】:
我正在 Visual Studio 2015 v4 中尝试此代码。
using namespace std;
void * operator new(size_t size) {
cout << "Creating new " << endl;
void * p = malloc(size);
return p;
}
class CTest {
private:
string a;
string b;
public:
CTest( const string &&one , const string && two ) :a(move(one)), b(move(two)) {}
};
int main() {
CTest("one", "one" );
return 0;
}
此代码在 Visual Studio 中输出 4 次“Creating new”,这意味着它分配了 4 次内存。但是按照语义,它应该只分配两次(在数据段中创建 2 个文字,创建一个和两个函数参数 = 2 个分配,然后将它们的资源移动到 a 和 b 成员变量)
在 g++ 下编译它会输出两次“Creating new”。
为了让 VS 遵循移动语义,我需要设置什么设置吗?据我所知,它应该是默认支持的。
感谢您的帮助。
【问题讨论】:
标签: c++ visual-studio c++11 visual-studio-2015 move-semantics