「已注销」 2019-07-14 07:12 采纳率: 0%
浏览 1498

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属性这样却不会出错?

  • 写回答

1条回答

  • dabocaiqq 2019-07-17 09:55
    关注
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!