gpt4 book ai didi

c++ - std::map、引用、指针和内存分配

转载 作者:太空狗 更新时间:2023-10-29 19:40:04 26 4
gpt4 key购买 nike

我在映射和值类型分配方面遇到了一些困难。

考虑这个简单的类:

class Column {
private:
char *m_Name;
public:
// Overrides
const char *Name(){
return this->m_Name;
}

// Ctors
Column(const char *NewName){
this->m_Name = new char[strlen(NewName) + 1];
strcpy(this->m_Name, NewName);
}

// Dtors
~Column(){
cout << "wtf?\n";
delete this->m_Name;
}
};

现在我有了这张 map :

// Typedefs
typedef std::map<int, Column> ColumnContainer;
ColumnContainer *m_Container;

当我调用它时:

Column *c = new Column("Test");
cout << "CREATED: " << c->Name() << "\n";
it = this->m_Container->insert(std::make_pair(0, *c)).first;
cout << "AGAIN: " << c->Name() << "\n";

控制台正在打印“wtf?”插入 map 后。

好像是在破坏专栏。这样对吗?

还是我做错了什么?

我想知道 value_typestd::map必须是具有已定义内存大小的结构类型,例如 POD 或 POD 数组?

cout << AGAIN不打印“测试”

我需要的是基于 int key 的列映射

最佳答案

make_pair(0, *c)创建一个(临时的,未命名的)pair<int, Column> .这对传递给 map::insert通过引用,并且,因为std::map拥有它的元素,它制作了对的拷贝。然后,临时对被销毁,销毁它包含的 Column 对象。

这就是为什么有必要为要用作标准容器元素的类型正确定义复制构造。

关于c++ - std::map、引用、指针和内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1645492/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com