#include <iostream>
using namespace std;
class Test{
public:
int *mem;
static int cons_counter;
static int copy_counter;
static int move_counter;
Test():mem(new int(1)){
cons_counter++;
cout<<"constructor has been called: "<<cons_counter<<"times"<<endl;
}
Test(const Test& t):mem(new int(*t.mem)){
copy_counter++;
cout<<"copy has been called: "<<copy_counter<<"times"<<endl;
}
// Test(Test && t):mem(t.mem){
// mem=nullptr;
// move_counter++;
// cout<<"move has been called: "<<move_counter<<"times"<<endl;
// }
~Test(){
delete mem;
cout<<"destroy Test"<<endl;
}
};
int Test::cons_counter=0;
int Test::copy_counter=0;
int Test::move_counter=0;
Test returnTest(){
return Test();
}
struct Test1{
int arr[10];
Test1(){
printf("%x\n",arr);
}
};
Test1&& test(){
int aa=0;
printf("%x\n",&aa);
Test1 a=Test1();
for(int i=0;i<10;++i){
a.arr[i]=0;
}
return std::move(a);
}
int main(int argc, const char *argv[]){
// Test tmp=returnTest();
// Test &&t=returnTest();
// const Test &tt=Test();
// Test t=Test();
int i;
int arr[100];
Test1 &&tmp=test();
for(i=0;i<100;i++){
arr[i]=100;
}
printf("%x %d\n",tmp.arr,tmp.arr[1]);
return 0;
}