dict

字典的用法,dict的查找特别快捷。如果我们的项目经常用到搜索某些数据,最好用dict类型。

总结一下:拷贝构造函数会逐一复制成员,所以如果对象里有指针,那么默认拷贝构造函数只会复制指针的内容,而不会为新对象分配相应的动态空间(存储指针所指向的内容),这样导致了两个对象的数据成员指向同一个地址,在释放空间时,导致同一块空间被释放两次这样的错误。同样赋值也会逐一复制成员,有指针成员也会导致析构这样释放空间的操作时出现错误,所以一般需要重写拷贝构造函数的类,也需要重写“=”赋值运算符。

自定义一个栈类,使用一个栈对象初始化另一个对象,自然会用到拷贝构造函数,代码如下

File /home/Alvin/git_projects/octopress/source/downloads/code/copy_constructor.cpp could not be found 以上代码在执行的时候会出现:

1
*** glibc detected *** ./a.out: double free or corruption (fasttop)

也就是说,我们释放了两次动态分配的空间。为了解决这个问题,我们需要重写拷贝构造函数,在拷贝构造函数中重写申请新对象的动态空间。

1
Stack(const Stack &t):mem(new T[t.max]), len(t.len), max(t.max){}