C ++中向量类的重载运算符+从+ =开始

问题描述

我知道关于该主题like this famous one (see sbi's answer)的讨论很多。我的目标是从运算符+ =重载两个向量的运算符+,如链接的著名问题中所述。

以下代码段非常经典

#include <iostream>
#include <cmath>

template <typename T>
class vector{
private:
    T* elem;
    std::size_t _size;
public:
    vector(const std::size_t size) : elem{new T[size]},_size{size} {}
    ~vector(){ delete[] elem;}
    std::size_t size() const { return _size;}
    T& operator[](std::size_t i){ return elem[i];}
    const T& operator[](std::size_t i) const{ return elem[i];}
    vector& operator+=(const vector& b) ;
    vector& operator=(vector b);
};

template <typename T>
std::ostream& operator<<(std::ostream& os,const vector<T>& v) {
  for (auto i = 0u; i < v.size(); ++i)
    os << "v[" << i << "] = " << v[i] << std::endl;
  return os;
}

template <typename T>
vector<T>& vector<T>::operator+=(const vector<T>& b) {
    for (std::size_t i =0;i<_size;++i){
        elem[i]+=b[i];
    }
    return *this; 
}

template <typename T>
vector<T> operator+(vector<T> a,const vector<T>& b){
    a+=b;
    return a;
}



template <typename T>
vector<T>& vector<T>::operator=(vector<T> b){
    std::swap(*this,b);
    return *this;
}






int main(){


    vector<double> v{10};
    vector<double> w{10};
    for (auto i=0u;i<v.size();++i){
        v[i] = i;
        w[i]  = i*i;
    }

    v+=w;
    std::cout << v << std::endl;


    vector<double> v1{10};
    v1 = w + v;
    std::cout << v1 << std::endl;

    return 0;
}

编译后,我收到几个警告,执行时我收到以下错误消息

free(): double free detected in tcache 2 Aborted (core dumped)

我既不了解发生的地方,也不知道如何解决它。我试图尽可能地坚持所链接主题中的建议,但是我的重载过程中存在一些错误,而且我无法找出原因/原因。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)