在std :: map中插入垃圾

时间:2015-02-15 15:04:35

标签: c++

我在插入std :: map和类似这样的类时遇到问题:

class Dat
{
private:
    char* data;

public:         
    Dat():data(NULL){}  
    ~Dat() { if(data) delete[] data; }  
    const char* get() { return data; }

    void set(char* str)
    {       
        if(!str) return;
        data = new char[strlen(str)+1];
        strcpy(data, str);
    }   
};

我试图像这样使用:

int main()
{   
    map<int, Dat> mDat;
    Dat dat;    

    dat.set("hello");
    mDat.insert(pair<int, Dat>(0, dat));
    printf("%s\n", mDat[0].get());
    return 0;
}

问题是:

before insert: data=0x0063a728 "hello"  
after insert:  data=0x0063a728 "îþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþOµ?bí\a" 
after printf:  data=0x0063a728 "««««««««"

无法找出数据变成垃圾的原因。

1 个答案:

答案 0 :(得分:0)

为您生成的默认复制构造函数正在执行浅层复制。

定义执行深层复制的复制构造函数,它将解决您的问题