我对C ++很陌生。我试图弄清楚复制构造函数是如何工作的,也是析构函数,但我不能让它工作正常。
我收到两个错误:
错误:在';'之前预期的primary-expression令牌
删除[];
类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;
答案 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)
delete
用于释放动态分配的内存。v1
和v2
是班级Dline
的成员,p2
只是您在程序中声明的变量。