在struct和main中分配内存的区别?

Env*_*nve 1 c++ pointers new-operator

我有两个这样简单的结构:

struct Point{
    double x, y;
};
Run Code Online (Sandbox Code Playgroud)

这样定义有什么区别

struct Circle{
    Point *P;
    float radius;
};
Run Code Online (Sandbox Code Playgroud)

还有这个

struct Circle{
    Point *P = new Point;
    float radius;
};
Run Code Online (Sandbox Code Playgroud)

如果我使用第一个样本并在main函数中执行类似的操作,是否有任何优势

Circle *C = new Circle;
C -> P = new Point;
Run Code Online (Sandbox Code Playgroud)

Joh*_*nck 5

这个:

struct Circle{
    Point *P = new Point;
    float radius;
};
Run Code Online (Sandbox Code Playgroud)

使用C++ 11类内初始化.这意味着默认情况下,如果没有其他构造函数(在您的示例中没有),P则将设置new Point为任何构造的Circle.这相当于您P创建示例后显式设置的示例的代码行数Circle.

当然,使用您提供的示例代码,您最好只使用值而不是指针:

struct Circle{
    Point P;
    float radius;
};
Run Code Online (Sandbox Code Playgroud)

然后总会有一个Point内部的Circle,我们不必在资源管理,内存泄漏等方面进行长时间的尴尬对话.