C ++拷贝构造函数,析构函数错误等等

时间:2014-04-06 11:41:05

标签: c++

我对C ++很陌生。我试图弄清楚复制构造函数是如何工作的,也是析构函数,但我不能让它工作正常。

我收到两个错误:

错误:在';'之前预期的primary-expression令牌

删除[];

  1. 我试图在删除[]之后添加不同的东西,但它们都没有用,所以我现在只留空了。
  2. 类DynamicLine没有名为“p2”的成员,

    1. 我做错了什么?我在测试程序中删除了p2。
    2. 这是我的头文件:

      template<class T>
      class DLine {
      
      public:
      
      DLine (T *v1, T *v2) 
          : v1 {v1},
          v2 {v2}
          {}
      
      
      T* v1;
      T* v2;
      
      // Copy constructor
      DLine(const DLine &l)
      {
          v1 = l.v1;
          v2 = l.v2;
      }
      
      
      DLine& operator= (const DLine &l) {
      if (this == &l) {
          return *this;
      }
      v1 = l.v1;
      v2 = l.v2;
      
      return *this;
      }
      
      ~DLine()
      {
      delete [];
      }
      
          };
      

      我还有一个矢量类:

      using namespace std;
      
      
      Vector2::Vector2(float nx, float ny) 
          : x {nx}
          , y {ny}
      {
      }
      
      
      float Vector2::distanceFrom(Vector2 v) {
          return sqrt( (x - v.x)*(x - v.x) + (y - v.y)*(y - v.y) ); 
      }
      
      ostream& operator << (ostream& os, Vector2 v) {
          return os << "(" << v.x << "," << v.y << ")";
      }
      

      这是我测试计划的一部分:

      Vector2 p1 {3.0, 5.0}; 
      Vector2 p2 {0,0}; 
      Vector2 p3 {7.0, 8.0};
      DLine<Vector2> l1 {&p1, &p2};   
      DLine<Vector2> l2 {nullptr, nullptr};
      l2 = l1;    
      l2.p2 = &p3;
      p1.x = 2.0;
      

3 个答案:

答案 0 :(得分:0)

你没有动态分配内存...你想删除什么......

您无需删除所有指针.... delete运算符用于删除使用new运算符分配的内存。

所以在这里你可以从析构函数中删除delete语句..

答案 1 :(得分:0)

至少你使用了错误的操作符delete[](参见http://www.cplusplus.com/reference/new/operator%20delete%5B%5D/):

pt = new MyClass[3];
delete[] pt;

答案 2 :(得分:0)

  1. delete用于释放动态分配的内存。
  2. v1v2是班级Dline的成员,p2只是您在程序中声明的变量。