上期内容回顾:
C++内存管理学习笔记(5)
2.5 资源传递 2.6 共享所有权 2.7 share_ptr
--------------------------------------------------------------------------------
3 内存泄漏-Memory leak
3.1 C++中动态内存分配引发问题的解决方案
假设我们要开发一个String类,它可以方便地处理字符串数据。我们可以在类中声明一个数组,考虑到有时候字符串极长,我们可以把数组大小设为200,但一般的情况下又不需要这么多的空间,这样是浪费了内存。很容易想到可以使用new操作符,但在类中就会出现许多意想不到的问题,本小节就以这么意外的小问题的解决来看内存泄漏这个问题。。现在,我们先来开发一个String类,但它是一个不完善的类。存在很多的问题!如果你能一下子把潜在的全找出来,ok,你是一个技术基础扎实的读者,直接看下一小节,或者也可以陪着笔者和那些找不到问题的读者一起再学习一下吧。
下面上例子,
1: /* String.h */ 2: #ifndef STRING_H_ 3: #define STRING_H_ 4: 5: class String 6: { 7: private: 8: char * str; //存储数据 9: int len; //字符串长度 10: public: 11: String(const char * s); //构造函数 12: String(); // 默认构造函数 13: ~String(); // 析构函数 14: friend ostream & operator<<(ostream & os,const String& st); 15: }; 16: #endif 17: 18: /*String.cpp*/ 19: #include
这时如果你满足于上面程序的结果,你也就失去了c++中比较意思的一部分知识,请看下面的这个main程序,注意和上面的main加以区别,