c++里面有些开辟的空间是不是不用你手动回收?我列出一些场合大家帮忙看看
int a[20];
int *a=new int [20];
string str="123";
string *buf;
buf=(string *)malloc (sizeof(str));
还有一种情况是buf=(char*)malloc(20);
buf[10]='\0';
这样是不是需要手动free 需要的话'\0'后的空间会正常释放?
还有我实例化类的话 CMYCLASS imyclass;和CMYCLASS *pimyclass =new CMYCLASS;这两种方式有什么差别,是不是new的话就一定要手动delete还有一个题外话问题 stl::string 是不是0结尾的?(NULL-terminal)
还有非unicode模式里面的汉字存储和unicode模式里面的汉字存储在内存里面是不一样的?(小头存储模式)
gb2312中汉字的编码和汉字的unicode的编码是一样的,2中模式中存储方式不一样?
int a[20];
int *a=new int [20];
string str="123";
string *buf;
buf=(string *)malloc (sizeof(str));
还有一种情况是buf=(char*)malloc(20);
buf[10]='\0';
这样是不是需要手动free 需要的话'\0'后的空间会正常释放?
还有我实例化类的话 CMYCLASS imyclass;和CMYCLASS *pimyclass =new CMYCLASS;这两种方式有什么差别,是不是new的话就一定要手动delete还有一个题外话问题 stl::string 是不是0结尾的?(NULL-terminal)
还有非unicode模式里面的汉字存储和unicode模式里面的汉字存储在内存里面是不一样的?(小头存储模式)
gb2312中汉字的编码和汉字的unicode的编码是一样的,2中模式中存储方式不一样?
一把需要程序员自己释放,使用delete或free
2.其他的变量都在栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
3. stl::string结尾是以‘\0’结尾的
第二个,没人规定unicode存储是大头或小头,当然用x86肯定都是小头。
第三个,不一样,两者之间基本没有关系。
在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。
这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。
2、int a[20];存放在栈上,在退出变量作用范围后被自动释放。
3、string str="123"; 使用的是string的构造函数,内存由string类管理,不需要自己释放。
4、\0只是C、C++中字符串结束的标志,与需不需要手动释放内存没有关系。