首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

类中对字符指针型成员变量赋值几种形式的有关问题

2012-02-29 
类中对字符指针型成员变量赋值几种形式的问题#include iostream#include cstdlibusingnamespacestdcl

类中对字符指针型成员变量赋值几种形式的问题
#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);

热点排行