【发布时间】:2009-10-29 17:57:11
【问题描述】:
我在 map 和 valuetype 分配方面遇到了困难。
考虑这个简单的类:
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;
}
};
现在我有了这张地图:
// 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?”在地图中插入之后。
它似乎正在破坏该列。是这样吗?
还是我做错了什么?
我想知道std::map 的value_type 是否必须是具有定义内存大小的结构类型,例如 POD 或 POD 数组?
cout << AGAIN
不打印“测试”
我需要的是基于 int 键的列映射
【问题讨论】:
-
您不需要使用 this 指针来引用成员数据,除非您想清除同名事物的任何歧义。 “this->”已经被暗示了。例如,您可以说:“删除 m_Name;”
-
是的,我就是喜欢用这个关键字
标签: c++ memory reference map pointers