在单件模式中写析构函数遇到的问题,是缓冲区有溢出吗,帮忙看看,多谢了.
在单件模式中写析构函数遇到的问题,是缓冲区有溢出吗,帮忙看看,多谢了.
程序源码:
#include <iostream>
#include <string>
using namespace std;
class Word
{
private:
Word();
Word(Word&);
Word &operator=(Word &);
int count;
char *pWords[10];
public:
~Word();
static Word &GetInstance()
{
static Word w;
return w;
}
int lookup(char *);
};
Word::Word()
{
count = 0;
strcpy(pWords[0]=new char[10], "test");
strcpy(pWords[1]=new char[10], "test");
strcpy(pWords[2]=new char[10], "test");
strcpy(pWords[3]=new char[10], "test");
strcpy(pWords[4]=new char[10], "test");
strcpy(pWords[5]=new char[10], "test");
strcpy(pWords[6]=new char[10], "test");
strcpy(pWords[7]=new char[10], "test");
strcpy(pWords[8]=new char[10], "test");
strcpy(pWords[9]=new char[10], "test");
}
Word::~Word()
{
int i;
for(i=0; i<10; i++)
{
delete pWords[i];
pWords[i] = NULL;
cout<<"deleting......"<<i<<endl;
}
}
int Word::lookup(char *s)
{
int i;
for(i=0; i<10; i++)
{
if(!strcmp(pWords[i], s))
{
count++;
}
}
return count;
}
int main()
{
Word &word = Word::GetInstance();
cout<<word.lookup("test")<<endl;
return 0;
}
结果:
10
deleting......
而不是预想的
10
deleting......0
deleting......1
deleting......2
deleting......3
deleting......4
deleting......5
deleting......6
deleting......7
deleting......8
deleting......9