c++ 智能指针的所有成员都分配到堆上了吗?

kxxlusnw  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(130)

给定以下代码:

#include <unordered_map>
#include <memory>
#include <string>

class Element {

    public:
        Element(const std::string& value) {
            m_value = value;
        }
     
    private:
        std::string m_value;

};

class Container {

    public:
        Container(const std::string& value) {
            m_elements.emplace(std::make_pair("New Key",Element(value)));
        }

    private:
        std::unordered_map<std::string, Element> m_elements;

};

int main() {

    std::string str {"New Value"};
    auto container = std::make_shared<Container>(str);

    return 0;

}

Containershared_ptr示例的所有成员是否都存储在堆中,包括m_elementsunordered_mapElement类的所有示例?shared_ptr的所有成员是否都存储在堆上?

sr4lhrrt

sr4lhrrt1#

智能指针的所有成员都分配到堆上了吗?
如果一个对象具有动态存储持续时间,那么根据定义,该对象不是成员对象。所有数据成员都存储在封闭对象的内存中。
智能指针是一个有状态的对象,实际上,它至少需要一个主题来表示该状态。它可以是直接数据成员,也可以是基类的数据成员。
std::make_shared<Container>创建具有动态存储持续时间的Container的示例,并返回拥有该示例的共享指针。

相关问题