C++: wntdll.pdb 未正确加载 class 使用运算符破坏

C++: wntdll.pdb not loaded correctly on class destruction with operator

注意:我使用的是 visual studio 社区 2019 C++14 编译器。 似乎以下程序正在尝试删除一个空位置。我在调用 + 运算符后尝试删除自定义向量 class...
这是代码:

class Vector
{
public:
    Vector(const double* t, int dim) : m_dim(dim)
    {
        m_t = new double[dim];
        for (int i = 0; i < dim; i++) {
            m_t[i] = t[i];
        }
    }
    ~Vector() {
        delete[] m_t;
    }
    Vector operator+(const Vector& v) {
        Vector tmp{ v };
        for (int i = 0; i < v.m_dim; i++) {
            tmp.m_t[i] = tmp.m_t[i] + m_t[i];
          }
          return tmp;
      }

  private:
     double* m_t;
     int m_dim = 0;
 };

int main() {
    double t[] = { 1,2,3 };
    Vector a{ t, 3 };
    Vector b{ t, 3 };
    Vector c{ t, 3 };

    a = b + c;
    // a answer is wrong,
    // destructor, wntdll.pdb not loaded correctly
}

我认为该错误与 + 运算符在返回值之前删除“tmp”对象有关。我只是不知道如何解决它。我尝试用指针和“新”运算符替换它,但没有用。

感谢@AlZ23z 和@Ted Lyngmo 的回答。 必须应用三规则,即函数必须有一个 =operator,copy constructor 和 destructor。

Vector(const Vector&);
~Vector();
void operator=(const Vector&);

void Vector::operator=(const Vector& v)
{
       for (int i = 0; i < m_dim; i++) {
            m_t[i] = v.m_t[i];
       }
}

https://en.cppreference.com/w/cpp/language/rule_of_three