首页 > 解决方案 > 创建相互依赖于其“容器”类的对象的可接受做法?

问题描述

假设我有一个可以容纳一组对象的类结构,并且它所包含的对象需要能够访问本身包含的容器。这是我正在谈论的示例类结构:

class Item;
class Container {
private:
    std::vector<Item*> items;
    ....
public:
    void add(Item *newItem) {
        items.push_back(newItem);
    }
    ....
}

class Item {
private:
    int data;
    Container* container;
    ....
public:
    Item(int data, Container* container) {
        this->data = data;
        this->container = container;
        if(container != nullptr) {
            container.add(this);
        }
    }
    ....
}

这将允许我像这样轻松地创建一个对象:

Container contain;
new Item(1, &contain);
new Item(2, &contain);
new Item(3, &contain);

然后我可以通过容器对象轻松访问这些对象,而这绝不会通过自由创建这样的对象而导致内存泄漏。

但是,以这种方式创建对象是不好的做法吗?另外,不是通过存储在对象本身中的指针直接访问容器,我是否应该将容器作为函数参数传递给需要使用的函数参数?

标签: c++11

解决方案


推荐阅读