c++ bug点
03 Jan 2015
|
类中包含指针成员
类中包含指针成员,特别小心拷贝构造函数,一步小心就内存泄露。其中一个析构就有可能出现悬挂指针。
#include <iostream>
using namespace std;
class Do {
public:
Do(): d(new int(0)) {}
~Do() {delete d;}
int* d;
};
int main()
{
Do a;
Do b(a);
cout << *a.d << endl;
cout << *b.d << endl;
}
(myenv)root@gavin-VirtualBox:/media/sf_share/pbase# g++ -o a a.cpp
(myenv)root@gavin-VirtualBox:/media/sf_share/pbase# ./a
0
0
*** Error in `./a': double free or corruption (fasttop): 0x000000000103ac20 ***
Aborted (core dumped)
- 解决方法1:通常最佳的解决方案是用户自定义拷贝构造函数来实现深拷贝。
#include <iostream>
using namespace std;
class Do {
public:
Do(): d(new int(0)) {}
Do(Do &s): d(new int(*s.d)) {} //拷贝构造函数,从堆中分配内存,并用*s.d初始化
~Do() {delete d;}
int* d;
};
int main()
{
Do a;
Do b(a);
cout << *a.d << endl;
cout << *b.d << endl;
}
(myenv)root@gavin-VirtualBox:/media/sf_share/pbase# g++ -o a a.cpp
(myenv)root@gavin-VirtualBox:/media/sf_share/pbase# ./a
0
0
- 解决方法2:移动语义。