我在插入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 "««««««««"
无法找出数据变成垃圾的原因。
答案 0 :(得分:0)
为您生成的默认复制构造函数正在执行浅层复制。
定义执行深层复制的复制构造函数,它将解决您的问题