我刚刚开始学习C ++并尝试移植一些PHP代码。
我从这段代码中得到了一个段错误:
class Color {
public:
// Props
int r;
int g;
int b;
int a;
// Constructor
Color (int r, int g, int b, int a) {
this -> r = r;
this -> g = g;
this -> b = b;
this -> a = a;
};
// Destructor
~Color () {
delete this;
};
// Mix 2 colors
void mixColor (const Color& c) {
this -> r = (this -> r + c.r) / 2;
this -> g = (this -> g + c.g) / 2;
this -> b = (this -> b + c.b) / 2;
this -> a = (this -> a + c.a) / 2;
};
};
在主文件中:
int main () {
Color myColor (10, 20, 30, 40);
return 1;
}
知道导致它的原因吗?
感谢。
答案 0 :(得分:1)
您应该只使用delete
为您分配的内容致电new
。您没有使用this
分配new
,因此您不应该在其上调用delete
。
答案 1 :(得分:1)
扩展目前的答案。
在这种情况下,您无法使用删除的原因是,不使用“' new'您在堆栈上创建对象的关键字,当它创建的范围不再相关时,它将自动销毁。
这对于您发布的对象非常有用,因为它很小,更重要的是,它不会在内部管理任何类型的内存,这可能会导致内存泄漏。
此外,由于类中的所有内容都是公共的,因此您可以考虑将其作为结构。