这个加法重载函数问题出在哪里

#include <iostream>
#include <cstdlib>

using namespace std;
class Stack {
public:
    Stack(int num);
    ~Stack();
    void push(int number);
    int pop();
    int top();
    int getSize();
    bool full();
    bool empty();
    friend const Stack operator + (const Stack& s1, const Stack& s2);
    friend ostream& operator << (ostream& out, const Stack& stk);
private:
    int size; // size of the stack
    int* arr; // stack
    int top_pri;
};

Stack::Stack(int num) {
    top_pri = -1;
    size = num;
    arr = new int[num];

Stack::~Stack() {
    /*
    Deconstructor for class Stack.

    You do not need to modify this function.
    */
    delete[] arr;
    arr = NULL;
}

void Stack::push(int number) {
    if (!full())
    {
        top_pri += 1;
        arr[top_pri] = number;
    }

const Stack operator + (const Stack& s1, const Stack& s2) {
    int a = s1.size + s2.size;
    Stack s3 = Stack(a);
    if (s1.top_pri == -1 && s2.top_pri!= -1)
    {
        for (int i = 0; i < s2.top_pri+1; i++)
        {
            s3.arr[i] = s2.arr[i];
        }
        s3.top_pri = s2.top_pri;
        return s3;
    }

    else if (s2.top_pri == -1 && s1.top_pri != -1)
    {
        for (int i = 0; i < s1.top_pri+1; i++)
        {
            s3.arr[i] = s1.arr[i];
        }
        s3.top_pri = s2.top_pri;
        return s3;
    }
    else if ((s2.top_pri == -1) && (s1.top_pri == -1))
    {
        return s3;
    }
    else if ((s2.top_pri != -1) && (s1.top_pri != -1))
    {
    for (int i = 0; i < s2.top_pri+1; i++)
        {
            s3.arr[i] = s2.arr[i];
        }
        for (int i = s2.top_pri+1,j = s1.top_pri; i < (s2.top_pri+1)+(s1.top_pri+1); i++,j--)
        {
            s3.arr[i] = s1.arr[j];
        }
        s3.top_pri = s2.top_pri + s1.top_pri + 1;
        return s3;
    }

大概就是模拟栈的先进后出,但是我将s1,s2中的数赋值给s3后就会报错

img


非常感谢

没有拷贝构造函数和operator=