很久没碰C++,今天写了个程序居然卡住了,简化代码如下:
#include <vector>
class A
{
int x;
};
class B
{
public:
vector<A*> getaa()
{
return aa;
}
private:
vector<A*> aa;
};
int _tmain(int argc, _TCHAR* argv[])
{
A *a = new A();
A *b = new A();
B bb;
bb.getaa().push_back(a);
bb.getaa().push_back(b);
printf("size : %d.\n", bb.getaa().size());
system("PAUSE");
return 0;
}
输出:0
再分别输出在getaa() aa、及main函数中bb.getaa( )的地址,可以发现二者不同。结论:return 返回的实际上是一份拷贝,修改该拷贝不影响实际对象。