C++ 返回类的实例会导致无效地址错误

C++ 返回类的实例会导致无效地址错误,c++,C++,我有一个类,用于表示具有未指定维数的向量,vectorat: int Size = 0; VectorN::VectorN(int L) { Size = L; Dimentions = new double[L]; } VectorN::~VectorN() { delete[] Dimentions; } VectorN VectorN::operator+(const VectorN &rhs) { VectorN r = VectorN(th

我有一个类,用于表示具有未指定维数的向量,vectorat:

int Size = 0;

VectorN::VectorN(int L)
{
    Size = L;
    Dimentions = new double[L];
}

VectorN::~VectorN()
{
    delete[] Dimentions;
}

VectorN VectorN::operator+(const VectorN &rhs)
{
    VectorN r = VectorN(this->Size);
    for (int i = 0; i < Size; i++)
    {
        r[i] = Dimentions[i] + rhs.Dimentions[i];
    }
    return r;
}

double& VectorN::operator[](int arg)
{
    return Dimentions[arg];
}
但是,在最后一行之后,程序遇到一个“断点”,并显示消息“指定给RtlValidateHeap的地址无效”

我认为正在发生的是

test3 = test + test2;
是通过使用创建Vectorate的临时实例导致问题的

test + test2
然后将其复制到test3中,然后删除临时版本,因为它超出了加法函数的作用域,但是由于它仍在test3中被引用,编译器出现问题,因为它试图删除仍在跟踪的变量。(请接受这一点,我不是C++专家,所以这完全是错误的。)
我想我可以通过简单地传递一个指向重载加法函数中创建的对象的指针来解决这个问题,但是我不想冒内存泄漏的风险,每次我在类中使用加法时都必须手动删除创建的实例。

我想问题可能是复制分配特殊函数。 如果你写析构函数,你也必须写其他特殊函数,这是三大定律(实际上是现代cpp中的五大定律)。
你可以在这个链接中找到更多的解释:

如果你用
std::unique\u ptr
std::vector
来代替原始指针,你会省去很多麻烦。这正是我要找的,谢谢!
test + test2