学习C++0x之右值引用

1、具名的右值引用将退化成左值 Rvalue&& r = Rvalue(); // r 是一个左值,虽然它被声明为右值引用。 // 在这样的情况下 r 如同一个局部对象:Rvalue r; void Fun(Rvalue&& _r) // _r 也是一个左值,你可以取它地址,但这是一个危险动作。{ Rvalue t = _r; // 不会调用 Rvalue(Rvalue&&) 转移构造函数,而是调用} // Rvalue(const Rvalue&) 复制构造函数。 2、不能把右值引用绑定到左值,但是强制转换可以打破...
2011-12-05 23:26 | 阅读 1164 次 | 评论 0 条

C++高级话题——重载operator delete的问题【积木网】

我觉得很不错,推荐一下。原文出处点击这里问题:想做一个内存管理,现在想到的方法是,做一个基类CMemMngr,在这个基类里重载了operator new/delete,然后让我的类都从这个基类里继承,以达到管理内存的目的。但是我需要在分配和释放内存时由用户提供一些额外的信息(比如int fIndex),于是定义了如下的operator new void* CMemMngr::operator new(size_t n, int fIndex) 这样是可以work的, CXX *p = new (1) CXX;其中CXX是CMemMngr的继承类 但是对于operator delete,如...
2011-11-11 20:33 | 阅读 1683 次 | 评论 0 条

不得不说的一些编程技巧二

当我第一次看到使用一个字符串描述类型来创建对象时觉得很稀奇,我在猜想,是不是内部使用超多的case,通过判断字符串来创建对应的对象。但是这样的情况是静态的,所有的字符串都已经被预置了,当有一个新的类型出现,那么怎么又神奇的扩展了呢?伪代码如下:Animal *dog = Animal::Create (“Dog”); // 使用字符串创建Dog类型的Animal实例。Animal *cat = Animal::Create(“Cat”); // 同上 如果Animal::Create不能修改,那么怎么让它能够创建Fish类型的Animal呢?所有的这...
2011-10-28 22:35 | 阅读 1390 次 | 评论 1 条

不得不说的一些编程技巧

一个人会一门语言不难,难的是会玩出花样,这就是技巧,当然玩的人多了这些技巧也就不怎么稀奇了,哈。 我就先说说一个叫“引用计数”的东西。顾名思义,就是记录一个对象被引用了几次。那么它的出发点是什么,这可能需要一个场景来描述。假设你有一个叫A的对象,在T1线程中被创建,之后可能会在T2线程或者T3线程中被使用。当然对象A是线程安全的,可以再任何线程中被安全使用,但问题是对象A该由谁来销毁?假如说T1和T2已经不需要使用对象A了,它们想留给T3线程来销毁,因为T3线程可能还在使用。这都是假设,反过来T3线程可能也不需要使用对象A了,那么它怎么知道T1和T2线程也不...
2011-10-27 21:56 | 阅读 1588 次 | 评论 10 条
浏览14418次