C++复制构造函数、析构函数错误等

C++ copy constructor, destructor error and more

本文关键字:错误 析构函数 复制 构造函数 C++      更新时间:2023-10-16

我对C++真的很陌生。我试图弄清楚复制构造函数和析构函数的工作原理,但我无法让它正常工作。

我得到两个错误:

错误:";"标记之前的预期主表达式

删除[];

  1. 我试图在删除 [] 后放置不同的东西,但它们都不起作用,所以我目前只将其留空。

类 DynamicLine 没有名为 'p2' 的成员,

  1. 我做错了什么?我在我的测试程序中做了decleare p2。

这是我的头文件:

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;
  1. delete用于释放动态分配的内存。
  2. v1v2是类Dline的成员,p2只是您在程序中声明的变量。

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

您不需要删除所有指针。delete运算符用于删除使用通过运算符分配的内存new

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

至少你用错了运算符delete[](见 http://www.cplusplus.com/reference/new/operator%20delete%5B%5D/):

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