|
像string类中的c_str()函数,它就返回一个char *指针,但是它所指向的内存空间是在怎么分配的呢?
我猜可以是这样实现:
1.使用new得到的,但是这需要调用c_str()的函数delete这个空间,所以应该不是这样实现的。
2.使用static变量/数组空间,但这不是线程安全的,也应该不是这样的。
3.使用类的数据成员,即这个指针是指向某个数据成员。
对于3.再作如下的讨论:
我自己编了一个类
- Date
- {
- public:
- Date(int year, int month, int day);
- char * c_str(){return m_date;}
- private:
- char m_date[16];
- };
复制代码
可是在程序中调用strncpy(dest, Date(2004, 5, 16).c_str(), 16);时会出现segment fault.
出现这个错误,我是这样想的:Date(2004,5,16)构造了一个匿名对象,系统为它分配了一段空间, 这个时候m_date是有效的。但是Date(2004,5,16).c_str()返回之后,这个匿名对象就变得无效了,所以它的空间也就被释放了,因而m_date所指向的那段空间也变得无效了。
但是我如果使用strncpy(dest, string("abc").c_str(), 16);这是没问题的。
所以由此看来,使用第3种方法是可能性也不大。
所以我想它是使用了其它的方法,或者是我上面的分析有误。
还请各位指正。 |
|