一些问题
1.内存分配器的源代码,有一个用来释放内存的函数:
void deallocate( void * p , size_t /* n */ )
{
free( p ) ;
}
这个第二个参数 size_t 根本就用不到,甚至没有形参名,为什么要声明它呢?难道只是为了当一个标记的作用?
2.下面的代码,通过编译了,运行时出错,错在哪?
string* sstr = (string*) malloc( sizeof(string) * 10 );
cout<<sstr<<" "<<sizeof(*sstr)<<endl; ////// 输出 4 32
sstr[0] = "a"; /// 通过编译,但运行发生内存错误,提示“该内存不能为written”,为什么呢?
*sstr = "a"; /// 同上
}
[解决办法]
1 要么是历史原因,要么是留着以后可能需要用
2 string 不是简单的数据类型,建立 string 对象要用构造函数
用 malloc 这种野蛮的方法行不通
[解决办法]
1中的话保留为以后所用。以后如果要加参数,就不用改你调用的代码,只要函数定义就可以了。
2中string是类,所以要用构造函数,正如1楼所说,用malloc野蛮进行是不行的。
[解决办法]
string 是一个类,用的时候不是那么简单的malloc撒
[解决办法]
你第二个没有调用构造函数进行构造啊。怎么能输出呢?至于第一个的第2个参数是要释放的字节数