刚到C++面临段错误

New to C++ facing a segfault

本文关键字:错误 段错误 C++ 刚到      更新时间:2023-10-16

我刚刚开始学习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;
}

知道是什么原因造成的吗?

谢谢。

扩展当前答案。

在这种情况下,您不能使用 delete 的原因是,通过使用 'new' 关键字,您在堆栈上创建了对象,并且当创建对象的范围不再相关时,它将自动销毁。

这对于您发布的对象很有用,因为它很小,更重要的是,它不会在内部管理任何类型的内存,这可能会导致一些内存泄漏。

此外,由于类中的所有内容都是公共的,因此您可以考虑将其设置为结构。

您应该只对分配给new的内容调用delete。您没有分配带有new this,所以您不应该打电话给delete