![](/img/trans.png)
[英]Extra destructor in Constructor, Copy constructor, Destructor sequence in C++
[英]C++ copy constructor, destructor error and more
我真的是C ++新手。 我試圖弄清楚復制構造函數和析構函數是如何工作的,但是我無法讓它正常工作。
我得到兩個錯誤:
錯誤:“;”之前的預期主表達式 代幣
刪除[];
DynamicLine類沒有名為“ 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;
delete
用於釋放動態分配的內存。 v1
和v2
是Dline
類的成員,而p2
只是您在程序中聲明的變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.