回 帖 发 新 帖 刷新版面

主题:[原创]请教大侠们关于临时对象的问题

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),请哪哪位大神帮我实现,在此不胜感激,小弟新人,请谅解。

回复列表 (共2个回复)

沙发

谢谢大家,虽然没人愿意说,呵呵,我已找到原因了,原来是我忘记写拷贝构造和赋值重载了,现在好了。

板凳

自己能找到原因并回复是非常好的做法啊!这样以后的新手也能参考不说,关键是楼主自己也通过自身努力学到了知识:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册