C++的右值和移动构造函数的测试程序说明
请尊重原作者的工作,转载时请务必注明转载自:www.xionggf.com
本文用以测试C++的右值,移动构造函数,以及标准库容器的emplace和push操作的区别。 测试环境是Visual C++ 14.0.25431.01 Update 3版本,未启用任何编译优化操作
代码可以在github中获取。
#include <cstring> #include <cstdlib> #include <map> #include <vector> #include <cstdio> class DemoClassA { public: DemoClassA() :num_(0), name_(nullptr) { std::printf("DemoClassA::DemoClassA()\n"); } ~DemoClassA() { if (name_) { std::printf("DemoClassA::~DemoClassA(%d,%s)\n", num_, name_); delete[] name_; name_ = nullptr; } else { std::printf("DemoClassA::~DemoClassA()\n"); } } DemoClassA(int num, const char* name) { num_ = num; auto len = std::strlen(name) + 1; name_ = new char[len]; memset(name_, 0, len); std::strcpy(name_, name); std::printf("DemoClassA::DemoClassA(%d,%s)\n", num_, name_); } DemoClassA(const DemoClassA& rhs) { num_ = rhs.