std :: map,引用,指针和内存分配

Jon*_*han 3 c++ memory pointers reference map

我正忙着使用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;
    }
};
Run Code Online (Sandbox Code Playgroud)

现在我有这张地图:

// Typedefs
typedef std::map<int, Column> ColumnContainer;
ColumnContainer *m_Container;
Run Code Online (Sandbox Code Playgroud)

当我这样称呼:

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";
Run Code Online (Sandbox Code Playgroud)

控制台正在打印"wtf?" 插入地图后.

它似乎正在摧毁这个专栏.这是正确的吗?

或者我做错了什么?

我想知道如果所述value_typestd::map具有结构类型与定义的存储器大小,像POD或POD的数组?

cout << AGAIN 不打印"测试"

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

Éri*_*ant 7

make_pair(0, *c)创建一个(临时的,未命名的)pair<int, Column>.这对map::insert通过引用传递,并且,由于std::map拥有它的元素,它会复制该对.然后,销毁临时对,销毁它包含的Column对象.

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