簡體   English   中英

C ++復制構造函數,析構函數錯誤等

[英]C++ copy constructor, destructor error and more

我真的是C ++新手。 我試圖弄清楚復制構造函數和析構函數是如何工作的,但是我無法讓它正常工作。

我得到兩個錯誤:

錯誤:“;”之前的預期主表達式 代幣

刪除[];

  1. 我曾嘗試在delete []之后放置不同的內容,但沒有一個起作用,因此我暫時將其留空。

DynamicLine類沒有名為“ p2”的成員,

  1. 我究竟做錯了什么? 我沒有在測試程序中清除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;

您不是在動態分配內存...您要刪除的內容然后...

您不需要刪除所有指針。... delete運算符用於刪除通過new運算符分配的內存。

因此,在這里您可以從析構函數中刪除delete語句。

至少您錯誤地使用了運算符delete[] (請參閱http://www.cplusplus.com/reference/new/operator%20delete%5B%5D/ ):

pt = new MyClass[3];
delete[] pt;
  1. delete用於釋放動態分配的內存。
  2. v1v2Dline類的成員,而p2只是您在程序中聲明的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM