类中对字符指针型成员变量赋值几种形式的问题
#include <iostream>
#include <cstdlib>
using namespace std;
class Test
{public:
void set(void){s= "12345 ";}
void show(void){cout < < "s= " < <s < <endl;}
private:char *s;};
int main()
{
Test a;
a.set();
a.show();
system( "pause ");
return 0;
}
上面这个程序能编译通过,并且运行结果也正确,请问在上面set()函数中对s赋值这样做行吗?
如果有像下面的构造函数呢?
class Test
{public:
Test(void){s= "12345 ";}//有问题吗?
void show(void){cout < < "s= " < <s < <endl;}
private:char *s;};
或者
构造函数为:Test(void):s( "12345 "){}这种形式,这样做会有问题吗?
[解决办法]
唉.
字符串是不会释放掉的常量空间,所以不用担心.
[解决办法]
编译都没问题,但我感觉应该给s用new分配空间.不知道要不要这样做?
========================
不需要了
s = "12345 ";
//这里字符串 "12345 " 在编译的时候就已经分配好了空间,并放在程序不可修改的区域。不需要担心它不会被释放。
//s 只是一个32位指针,占4字节,已经随 class Test 的建立分配好空间了。
[解决办法]
实际上编译器的作法可能是这样的:
const char *_s = "12345 ";
s = const_cast <char*> (_s);