孔雀开发小屋

专注并致力于手机客户端开发
<2010年11月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

  • 随笔 - 103
  • 文章 - 0
  • 评论 - 251
  • 引用 - 0

常用链接

留言簿(38)

随笔分类

随笔档案

关注的博客

朋友的博客

搜索

  •  

最新评论

阅读排行榜

评论排行榜

google C++风格指南笔记(二):类
1. 构造函数的职责
   如果对象需要进行有意义的(non-trival)初始化,考虑使用明确的init()的方法来进行初始化操作。因为如果在构造函数中进行有意义的初始化操作,一旦这些操作失败,对象将进入不确定的状态。symbian编程中广泛使用一种称为“两阶段构造法”的方法来解决这个问题,值得借鉴。

2. 默认构造函数
   如果一个类定义了很多数据成员,那么就自己写一个构造函数,因为如果不自己写,编译器会产生一个垃圾的默认构造函数,这应该不是你想要的。
   new 一个不带参数的类对象时, 会调用类的默认构造函数. 用 new[] 创建数组时,默认构造函数则总是被调用。保证对象的构造要有意义。

3. 对单个参数的构造函数使用explicit关键字。
   如果C++的构造函数只有一个参数,那么就会有一个对应的“隐式转换”。即:将该构造函数中参数的数据类型对应的数据转换为该类的对象。这么说有点绕,举个例子就明白了:
class IntCls
{
public:
   IntCls(
int m);
   
};

IntCls ic 
= 10// Convert 10 to IntCls

// convert:
// IntCls tmp = IntCls(10);
// ic = tmp

4.拷贝构造函数
  仅在代码中需要拷贝一个类对象的时候使用拷贝构造函数。大部分类并不需要可拷贝, 也不需要一个拷贝构造函数或重载赋值运算符。
 
// 禁止使用拷贝构造函数和 operator= 赋值操作的宏
// 应该类的 private: 中使用

#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
            TypeName(
const TypeName&); \
            
void operator=(const TypeName&)
在class Foo 中:
class Foo {
    
public:
        Foo(
int f);
        
~Foo();

    
private:
        DISALLOW_COPY_AND_ASSIGN(Foo);
};

5. 结构体
   仅当只有数据时使用 struct, 其它一概使用 class.

posted on 2010-08-11 13:21 孔雀 阅读(2209) 评论(1)  编辑 收藏 引用 所属分类: Think&Style

评论

# re: google C++风格指南笔记(二):类 2010-08-13 00:46 陈梓瀚(vczh)

一旦在构造函数失败抛出异常,那么外边永远都无法获得构造好的这个对象,因此没有“不确定状态”可言。

如果不能使用异常,那么不要使用C++。C++的构造函数和析构函数带来的异常安全的意义在没有异常的情况下沦为了不值钱的语法糖了,仅仅是防止你忘记调用某个函数罢了。
  回复  更多评论    

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理