C++ 中的聚合:日期在 Class 文章中

Aggregation in C++: Date inside Class Article

我在作业中实施聚合时遇到问题。我们要做一个Class文章,get/set方法和私有变量。我还必须使用带有名称日期的 struct/class(我插入了 int day/month/year)并将该结构类型实现为 class 文章中的日期 ArticleDate 作为私有变量中的聚合。我在向自己解释这个 ArticleDate 应该存在,即使我销毁了 class Article 的对象。那正确吗? + class 文章的其他对象和各种子class 是否可以使用它?

我能得到一个很好的解释吗?谢谢。

这是代码:
Article.h

struct Datum { // struct is in the same header file as class Article (Oglas is Article in Slovenian)
        int dan;
        int mesec;
        int leto ;
};

class Oglas {
    protected:
        string naslov_oglasa; // title of Article
        Datum* datumObjave; // aggregation?
        double cena; // price
    public:

    Oglas();
    Oglas(const Oglas& t);
    ~Oglas();
...
};

methods.cpp:

Oglas::Oglas(): naslov_oglasa(""), cena(0)  {
    this->agregacija();
}

Oglas::Oglas(const Oglas& t): cena(t.cena), naslov_oglasa(t.naslov_oglasa) {
    datumObjave = t.datumObjave; //datumobjave = date of posting the article
}

void Oglas::agregacija() {
    datumObjave = new Datum();
    datumObjave->dan = 5; //day
    datumObjave->mesec = 11; //month
    datumObjave->leto = 1995; // year
}


Oglas::~Oglas() {}

我认为你在英文中使用 DateArticle 来指代 DatumOglass class你的代码。

您的 Article class 没有 Date class 成员。它有一个指向 Date class 成员的指针。区别很关键,也很重要。

如果你的 Article class 实际上确实有一个 Date class 成员,那么它会被销毁,当然,连同 Article class,当 Article class 被摧毁时。

但在这种情况下,唯一被破坏的是指向 Date class 的指针。如果在其他地方有另一个指向同一个 class 实例的指针,它仍然可以被其余代码使用。

但是如果没有另一个指向这个 Date class 的指针,恭喜你,你刚刚泄漏了内存。

这里有一些 Google 食物给你:RAII。搜索它,然后阅读最上面的结果。

I am explaining to myself that this ArticleDate should survive, even if I destroy the object of class Article. Is that right?

没有.


Why?

因为它是动态分配的,所以它将在那里(分配在内存中),"forever",除非你取消分配。

更糟糕的是,这将是您无法访问的内存泄漏,因为当对象被销毁时指针将消失。


因此,始终取消分配您动态分配的内存