
C++
文章平均质量分 55
fragno
这个作者很懒,什么都没留下…
展开
-
创建类的时候使用new和不使用new
1、使用new是创建指针,手工在堆上申请空间,使用完毕后需要手工释放。 不用new是创建对象,自动在栈上申请空间,对象声明周期结束后系统会自动释放空间。2、使用new如果不手动释放空间,会造成内存泄露;不用new由于是系统自动管理,不会造成内存泄露。3、使用new创建的是指针,可以赋值给全局的变量,可以将局部变量变成全局变量,还能把对象作为函数返回值。不用new创建的对象生命期只有转载 2011-11-14 13:10:12 · 1176 阅读 · 0 评论 -
STA和MTA线程模式的区别
STA和MTA线程模式的区别(摘录)By 馒头贩子 发表于 2010-5-20 14:36:00 STA: Single-Thread Apartment, 中文叫单线程套间。就是在COM库初始化的时候创建一个内存结构,然后让它和调用CoInitialize的线程相关联。这个内存结构针对每个线程都会有一个。支持STA的COM对象只能转载 2012-09-15 14:11:57 · 6386 阅读 · 0 评论 -
const用法
1.指向常量的指针const 类型 * 指针名或者类型 const * 指针名特点:不能修改指向的对象的值,可以修改指针的指向int var1=1;const int var2=2;const int * p1=&var1;const int * p2=&var2;*p1=100;//错误,不能修改*p2=100;//错误,不能修改p1=&var2;//ok,可以修改转载 2011-12-05 11:13:10 · 395 阅读 · 0 评论 -
new & delete
Tips:1 建议new,delete,而不是malloc,free2 new要判断返回值,经常成功不代表一定成功3 使用new动态分配内存:若没有足够内存,则new返回0(空值指针null pointer);4 不要使用delete释放不是new分配的内存,delete释放指针指向的内存,但不会删除指针本身;5 delete指针后尽量赋值NULL6 new分配一块内存的时转载 2011-10-28 10:04:58 · 349 阅读 · 0 评论 -
vtable & _vptr
Virtual Table is a lookup table of function pointers used to dynamically bind the virtual functions to objects at runtime. It is not intended to be used directly by the program, and as such there is n翻译 2011-11-09 10:43:06 · 1025 阅读 · 0 评论 -
C++求学之路
昨天写了一篇如何学好C语言,就有人回复问我如何学好C++,所以,我把我个人的一些学习经验写在这里,希望对大家有用。首先,因为如何学好C语言中谈到了算法和系统,所以这里就只谈C++语言。C++是最难的语言。这个世界上最难的编程语言可能非C++莫属了。你千万不要以为几天就可以学好C++,C++的学习曲线是相当BT的,你可以看看这篇文章。C++是一门很自由的语言,自由到了有点BT和恐怖的地步转载 2011-11-21 17:14:26 · 453 阅读 · 0 评论 -
C++中托管代码
感谢Stanley B. Lippman为我们提供了一篇非常优秀的关于C++/CLI的介绍: Translation Guide: Moving Your Programs from Managed Extensions for C++ to C++/CLIhttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/转载 2011-10-31 16:31:26 · 3710 阅读 · 0 评论 -
gcnew
C++/CLI中使用gcnew关键字表示在托管堆上分配内存,并且为了与以前的指针区分,用^来替换* ,就语义上来说他们的区别大致如下: 1. gcnew返回的是一个句柄(Handle),而new返回的是实际的内存地址. 2. gcnew创建的对象由虚拟机托管,而new创建的对象必须自己来管理和释放.Memory for managed types is转载 2011-10-31 16:19:20 · 781 阅读 · 0 评论 -
Static & const
Static:之前我们知道static定义的对象都是存放在数据段(静态存储区,有别于BSS段)的,所以一旦建立其就会延续到整个程序结束,而且需要注意的是,其只会初始化一次。 #include using namespace std;class StaticTest{public:static int testnum;};int StaticTest:原创 2011-10-29 12:15:43 · 245 阅读 · 0 评论 -
程序在内存中的存放
数据段中存放:全局变量(初始化以及未初始化的)、静态变量(全局的和局部的、初始化的以及未初始化的) (未初始化的放在bss段中)代码段中存放:全局只读变量(const)、字符串常量 堆中存放:动态分配的区域 栈中存放:局部变量(初始化以及未初始化的,但不包含静态变量)、局部只读变量(const)转载 2011-10-28 13:55:44 · 908 阅读 · 0 评论 -
运算符重载
C++运算符重载探讨前言 多态性是面向对象程序设计的重要特征之一。它与前面讲过的封装性和继承性构成了面向对象程序设计的三大特征。这三大特征是相互关联的。封装性是基础,继承性是关键,多态性是补充,而多态又必须存在于继承的环境之中。 所谓多态性是指发出同样的消息被不同类型的对象接收时导致完全不同的行为。这里所说的消息主要是指对类的成员函数的调用,而不同的行为是指不同的实现。转载 2011-10-28 10:21:55 · 294 阅读 · 0 评论 -
深拷贝和浅拷贝
深拷贝与浅拷贝探析1. 深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。举个例子,一个人名叫张三,后来用他克隆(假设法律允许)了另外一个人,叫李四,不管是张三缺胳膊少腿还是李四缺胳膊少腿都不会影响另外一个人。比较典型的就是Value(值)对象,如预定义类型Int32,Double,以及结构(struct),枚举(Enum)等。转载 2011-11-14 11:49:33 · 340 阅读 · 0 评论 -
c++中冒号(:)和双冒号(::)的用法和c/c++ 位域结构体
1.冒号(:)用法(1)表示结构体内 位域的定义(即该变量占几个bit空间)typedef struct _XXX{ unsigned char a:4; unsigned char c;}XXX;(2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。转载 2012-09-15 20:56:12 · 1735 阅读 · 0 评论