65,186
社区成员




class A;
A func()
{
A a;
return a;
}
int main()
{
A *a = &func(); // s1
A &a = func(); // s2
return 0;
}
#include <iostream>
using namespace std;
#include "version.h"
int g_obj = 0;
class A
{
public:
A()
{
p = new char[20];
g_obj++;
cout<<"A() g_obj="<<g_obj<<endl;
}
~A()
{
delete[] p;
g_obj--;
cout<<"~A() g_obj="<<g_obj<<endl;
}
char*p;
};
A func()
{
A a;
return a;
}
int main()
{
{
A *a1 = &func(); // s1
A &a2 = func(); // s2
}
return 0;
}
以上代码会报错,说明lz的这种调用方式存在的大问题
试试
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout<<"A is created"<<endl;
}
void show()
{
cout<<"show something"<<endl;
}
};
A func()
{
A a;
return a;
}
int main()
{
A b;
func() = b;
func().show();
return 0;
}
请告诉我,如果不是c++ 11的非常量右值引用,这个程序怎么通过的?