C++ 关于带普通指针的类的operator+的重载
刚学C++一个小问题我的类内带了普通指针classA现定义一个classA&operator+(constA&l,constA&r){//这个其中我需要定义一个新的类As...
刚学C++ 一个小问题
我的类内带了普通指针 class A
现定义一个
class A& operator+(const A&l,const A&r)
{
//这个其中我需要定义一个新的类A sum,把l和r中的元素都放到sum中去
class A sum;
//(进行合并操作)
return sum;
}
class A p1,p2,psum;
这里问题来了,我在外面用的psum=p1+p2;
p1+p2进入了上面的函数,return的时候,因为claas A sum 是局部变量,return的时候自动调用了析构函数,把创建的new 都删除了,返回来的东西都是被删除了,自然psum就出错了。
我想知道。。有什么好方法实现我的这一部分操作呢。 展开
我的类内带了普通指针 class A
现定义一个
class A& operator+(const A&l,const A&r)
{
//这个其中我需要定义一个新的类A sum,把l和r中的元素都放到sum中去
class A sum;
//(进行合并操作)
return sum;
}
class A p1,p2,psum;
这里问题来了,我在外面用的psum=p1+p2;
p1+p2进入了上面的函数,return的时候,因为claas A sum 是局部变量,return的时候自动调用了析构函数,把创建的new 都删除了,返回来的东西都是被删除了,自然psum就出错了。
我想知道。。有什么好方法实现我的这一部分操作呢。 展开
1个回答
展开全部
你首先函数定义就错了,因class A& operator+(const A&l,const A&r)返回的不应该是引用类型,左引用意味返回左值,+运算返回的应该是右值,比如下面写法就是错误的:
int a=1,b=2,c=3;
a+b=c;//这是错误的,+运算返回的是右值
按照你原来的写法就会导致上述表达式可以运行,这就改变C++设计初衷,会引起一系列问题的。
class A operator+(const A&l,const A&r);//这样就可以了,返回的是一个副本,然后你赋值时会调用“=”运算符,当然也许编译器面对定义时会调用拷贝构造函数,比如:
A a2,a3;
A a1=a2+a3;//这时也许编译器会直接调用拷贝构造函数,而不经过operator =。
int a=1,b=2,c=3;
a+b=c;//这是错误的,+运算返回的是右值
按照你原来的写法就会导致上述表达式可以运行,这就改变C++设计初衷,会引起一系列问题的。
class A operator+(const A&l,const A&r);//这样就可以了,返回的是一个副本,然后你赋值时会调用“=”运算符,当然也许编译器面对定义时会调用拷贝构造函数,比如:
A a2,a3;
A a1=a2+a3;//这时也许编译器会直接调用拷贝构造函数,而不经过operator =。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询