带有超载操作员 的无访问地址的指针返回



我发现了很多关于此错误的讨论,但是到目前为止,我尝试过的任何事情都没有工作。

基本上,我正在使用动态数组创建一个Templater Vector类,但是当我尝试超载" "运算符时,它仅适用于2个附加组(v3 = v1 v2),当我尝试了3个加载项时(v4 =v1 v2 v3),它返回最后一个加起来(v3)。我发现这是因为当 运算符的函数被称为第二次时,第一个附加的指针具有值0xcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccced value。这意味着它可能会注重不再存在的事物。但是,我不知道应该如何从过载函数返回矢量对象。这是我尝试的,但是这些都不是:

//this works only for two addends
template <class T> Vector<T>& operator+(Vector<T>& v1, Vector<T>& v2)
{
    Vector<T> v;
    //calculations
    return v;
};
//this causes above mentioned error
template <class T> Vector<T> operator+(Vector<T>& v1, Vector<T>& v2)
{
    Vector<T> v;
    //calculations
    return v;
};
//this causes above mentioned error too
template <class T> Vector<T> operator+(Vector<T>& v1, Vector<T>& v2)
{
    Vector<T>* v= new Vector<T>;
    //calculations
    return (*v);
};

任何想法如何返回向量对象,以便它也可以与3个附加组件一起使用?

您需要使用const参考文献,以便它们可以绑定到临时性:

template <class T> 
Vector<T> operator+(const Vector<T>& v1, const Vector<T>& v2)
{
  Vector<T> tmp = v1;
  tmp += v2;
  return tmp;
}

如果您的类型有效地移动,则可以使用RVALUE参考oveloads来利用:

template <class T> 
Vector<T> operator+(Vector<T>&& v1, Vector<T>&& v2)
{
  Vector<T> tmp = std::move(v1);
  tmp += v2;
  return tmp;
}

显然,您不应返回引用或需要由呼叫者删除的内容。

最新更新