不可避免的,我也是尝试造了一个string,我把它定义为mString
我先在对象里定义了一个b_str_
char* b_str_ = NULL;
初始化的时候,需要给这个指针分配一个初始空间的:我用了两个方法,大家看看有什么区别:
#ifdef UseMalloc
b_str_ = (char*)malloc(BaseLen);
#else
b_str_ = new char[BaseLen];
#endif // UseMalloc
其它的参数先忽略,不重要。
重新分配内存的时候:
#ifdef UseMalloc
char* newptr = (char*)realloc(b_str_, Len);
if (newptr)
{
if (newptr != b_str_)
{
b_str_ = newptr;
memLen = Len;
}
}
#else
char* newptr = new char[Len];
if (newptr)
{
if (newptr != b_str_)
{
memcpy(newptr, b_str_, len_);
delete[] b_str_;
b_str_ = newptr;
memLen = Len;
}
}
#endif // UseMalloc
析构的时候:
mString::~mString()
{
#ifdef UseMalloc
free(b_str_);
b_str_ = 0;
#else
delete[] b_str_;
b_str_ = NULL;
#endif // UseMalloc
}
各位大神们,看看上面的代码,两种方式有什么区别?
我现在遇到的问题是:如果我用UserMalloc的方式,就会有问题,线程在不确定的情况下就会崩!
而我用new char[...]的方式,就没什么问题
各位大神高手们,可以知道这其中有什么我这个小白没考虑到的问题吗?
--
FROM 223.198.171.*