「已注销」 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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?