2014年1月15日
摘要: 1、Lazy解决什么问题? 考虑下面的需求,有个对象很大,创建耗时,并且要在托管堆上分配一大块空间。我们当然希望,用到它的时候再去创建。也就是延迟加载,等到真正需要它的时候,才去加载。考虑一下,我该怎么解决这个问题。2、显然,这里需要加一个中间层,将大对象封装起来,暴露接口,开始并不创建大对象,等到用户真正访问对象的时候,再去创建。另外,这个中间层应该可以封装不同类型的大对象,因此需要类模版。Lazy就是为了解决这个问题。 阅读全文
posted @ 2014-01-15 20:46 Andy Niu 阅读(2833) 评论(0) 推荐(1)
摘要: 1、有些情况下,我们不希望对象被拷贝,比如独一无二的对象,拷贝是没有意义的。这种情况下,我们应该禁止拷贝。也就是不提供copy构造和copy赋值,可问题是,如果我们不提供,编译器会自动生成。那该怎么办?2、我们声明copy构造和copy赋值为private,这就明确告诉了编译器,我已经声明了,你别为我生成了。由于copy构造和copy赋值是private,就禁止了外部的拷贝操作。 但仔细想,还是有问题,因为类的成员方法,友元方法,友元类还是可以访问private权限的copy构造和copy赋值,那该怎么办? 只声明,不定义。这样,就导致编译器连接的时候出错。有没有更好的办法呢?也就是说,将.. 阅读全文
posted @ 2014-01-15 20:19 Andy Niu 阅读(476) 评论(0) 推荐(0)
摘要: 1、如果没有声明copy构造方法,copy赋值操作符,和析构方法,编译器会自动生成这些方法,且是inline。2、如果没有声明任何构造方法,编译器会自动生成一个default构造方法,且是inline。3、编译器总是为我们生成一个合成析构方法。4、首先考虑,编译器生成的copy构造方法做什么事? copy构造方法是一个特殊的构造方法,形参是const T&。编译器生成的copy构造方法逐个成员初始化。逐个成员初始化:对于创建对象的每个non-static字段,使用现有对象的字段去初始化。 如果字段是类类型,递归调用类的copy构造方法。如果是内置类型,逐个bit拷贝。需要注意的是:对于 阅读全文
posted @ 2014-01-15 19:49 Andy Niu 阅读(377) 评论(0) 推荐(0)