C++static变量的销毁问题
template <typename T>
class SetClass
{
public:
    const static int MAXSIZE;
    SetClass(void);
    SetClass(const T *a, int n);
    ~SetClass(void);
    bool IsInSet(const T &e) const;
    bool Insert(const T &e);
    bool Delete(const T &e);
    void Display(void) const;
    SetClass<T> &Union(const SetClass<T> &S) const;
    SetClass<T> &Intersection(const SetClass<T> &S) const;
    SetClass<T> &Difference(const SetClass<T> &S) const;
private:
    int *data;
    int n;
};

template <typename T>
SetClass<T> &SetClass<T>::Union(const SetClass<T> &S) const
{
    static SetClass<T> R;

    for (int i = 0; i < n; ++i)
    {
        R.Insert(data[i]);
    }

    for (int i = 0; i < S.n; ++i)
    {
        if (!R.IsInSet(S.data[i]))
        {
            R.Insert(S.data[i]);
        }
    }

    return R;
}

这个方法运行正常,但是若将返回值类型改为SetClass < T >,则在调用析构函数销毁static SetClass < T > R时似乎data被销毁了两次发生错误,为什么会出现这种情况,是因为返回值的时候发生了浅拷贝吗?但是为什么返回值类型为SetClass < T >, 并且去掉R的static属性这样却不会出错?

c++

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐