主题:[原创]请教大侠们关于临时对象的问题
include<iostream>
include<memory.h>
using namespace std;
class A
{
int m_a;
int *p;
public:
A(){m_a = 0;p=0;}
A(int a,int *m){p = new int[a];memcpy(p,m,a*sizeof(int));m_a = a;}
A operator +(A&ref)
{
int *q = new int[m_a];
for(int i=0;i<m_a;i++)
{
q[i] = p[i]+ref.p[i];
}
A tem(m_a,q);
delete []q;
q = 0;
return tem;
}
~A(){delete []p;p=0;}
};
void main()
{
int *p1 = new int[2];
int *p2 = new int[2];
p1[0]=1;
p1[1]=2;
p2[0]=1;
p2[1]=3;
A a1(2,p1),a2(2,p2),b;
b = a1+a2;
}
小弟感觉是在返回局部对象时产生临时对象,从而进入了两次析构函数造成问题。请教各位求解,小弟只是想重载一下加法而已,因为加法代码中有开辟空间,所以不能用返回无名对象的方法避开这点(因为在返回前要delete),请哪哪位大神帮我实现,在此不胜感激,小弟新人,请谅解。
include<memory.h>
using namespace std;
class A
{
int m_a;
int *p;
public:
A(){m_a = 0;p=0;}
A(int a,int *m){p = new int[a];memcpy(p,m,a*sizeof(int));m_a = a;}
A operator +(A&ref)
{
int *q = new int[m_a];
for(int i=0;i<m_a;i++)
{
q[i] = p[i]+ref.p[i];
}
A tem(m_a,q);
delete []q;
q = 0;
return tem;
}
~A(){delete []p;p=0;}
};
void main()
{
int *p1 = new int[2];
int *p2 = new int[2];
p1[0]=1;
p1[1]=2;
p2[0]=1;
p2[1]=3;
A a1(2,p1),a2(2,p2),b;
b = a1+a2;
}
小弟感觉是在返回局部对象时产生临时对象,从而进入了两次析构函数造成问题。请教各位求解,小弟只是想重载一下加法而已,因为加法代码中有开辟空间,所以不能用返回无名对象的方法避开这点(因为在返回前要delete),请哪哪位大神帮我实现,在此不胜感激,小弟新人,请谅解。