char *r = "abc";
delete r;
想问一下这样delete为什么是错误的,忘记"abc"所在的内存空间叫什么了看了一下STL string 的实现,也就是xstring。发现如果是string的话,那么对一个string的赋值操作都是复制另一个string的内容,而不会使自己指向那个string,这个也很合理。但是突然觉得用string虽然很爽,但是效率不是很高,如果能确保某个字符串在始终存在的话,比如在在传参数的时候1.
void Fun(string name)
{
......
}int main()
{
string str = "abc";
Fun(str);
return 0;
}2.
void Fun(LPCTSTR pszName)
{
........
}int main()
{
string str = "abc";
Fun(str.c_str);
return 0;
}
只要保证在Fun使用中,string不会析构掉,那么显然2比1高效很多,问一下各位我说的对吗?顺便帮我解答一下上面的问题,谢谢
delete r;
想问一下这样delete为什么是错误的,忘记"abc"所在的内存空间叫什么了看了一下STL string 的实现,也就是xstring。发现如果是string的话,那么对一个string的赋值操作都是复制另一个string的内容,而不会使自己指向那个string,这个也很合理。但是突然觉得用string虽然很爽,但是效率不是很高,如果能确保某个字符串在始终存在的话,比如在在传参数的时候1.
void Fun(string name)
{
......
}int main()
{
string str = "abc";
Fun(str);
return 0;
}2.
void Fun(LPCTSTR pszName)
{
........
}int main()
{
string str = "abc";
Fun(str.c_str);
return 0;
}
只要保证在Fun使用中,string不会析构掉,那么显然2比1高效很多,问一下各位我说的对吗?顺便帮我解答一下上面的问题,谢谢
而LPTSTR 就是 char*, 即普通字符串(非常量,可修改的)。
由于const char* 最简单(常量,不涉及内存变更,操作迅速)
另外,string的问题,可以用引用传递参数,就不会复制对象了,即:
void Fun(string& str)
delete r;delete和new要对应使用,char *r = "abc",这是一个常量字符串,内存在静态存储区,不用你管的。STL的东西的实现很多都存在对象复制,会影响效率,但是也保证了内存的安全,在1中你把传入参数改为引用就可以避免字符串的复制啊,effective C++中有说的。void Fun(const string &name){
......
}int main()
{
string str = "abc";
Fun(str);
return 0;
}
可以传递引用,避免复制的开销