如何让C++0x右值引用发挥威力?
右值引用号称将解决C++的临时对象问题,上代码:
// 程序一,VC10,此时如何通过右值引用,解决重新new内存的问题?
// 由于MinGW 4.4使用引用计数,所以无法对比
#include <stdio.h>
#include <string>
std::string test(const std::string& str)
{
printf("1: 0x%08x\n", str.c_str());
std::string tmp(str);
printf("2: 0x%08x\n", tmp.c_str());
return std::move(tmp);
}
int main()
{
printf("3: 0x%08x\n", test("右值引用测试!").c_str());
return 0;
}
// 程序二,难道VC和GCC,对vector都使用了引用计数?// MinGW 4.4也是一样的结果#include <stdio.h>#include <vector>std::vector<int> test(const std::vector<int>& v){ printf("1: 0x%x\n", &v[0]); std::vector<int> t(v); t.push_back(88); printf("2: 0x%x\n", &t[0]); return t; // 与std::move(t);结果一样,为啥? //return std::move(t);}int main(){ std::vector<int> v(1000); // 改变这个值的大小,将会看到v2[0]地址的变化,为啥? v.push_back(2); v.push_back(5); v.push_back(9); std::vector<int> v2 = test(v); printf("3: 0x%x\n", &v2[0]); for (int i = 0; i < 100; ++i) v2.push_back(i); printf("4: 0x%x\n", &v2[0]); return 0;}
string(string&& s) { ... }
#include<iostream>#include<algorithm>#include<vector>#include<string>using namespace std;void print(int x){cout<<x<<' ';}int main(){ vector<int> iter1,iter2; for(int i=1;i<100;i++) { if(i%2==0) iter1.push_back(i); else iter2.push_back(i); } for_each(iter1.begin(),iter1.end(),print); cout<<endl; for_each(iter2.begin(),iter2.end(),print); cout<<endl;}