给定以下代码:
#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;
}
Container
shared_ptr
示例的所有成员是否都存储在堆中,包括m_elements
unordered_map
中Element
类的所有示例?shared_ptr
的所有成员是否都存储在堆上?
1条答案
按热度按时间sr4lhrrt1#
智能指针的所有成员都分配到堆上了吗?
如果一个对象具有动态存储持续时间,那么根据定义,该对象不是成员对象。所有数据成员都存储在封闭对象的内存中。
智能指针是一个有状态的对象,实际上,它至少需要一个主题来表示该状态。它可以是直接数据成员,也可以是基类的数据成员。
std::make_shared<Container>
创建具有动态存储持续时间的Container
的示例,并返回拥有该示例的共享指针。