【C++沉思录】句柄2
摘要:1、【C++沉思录】句柄1 存在问题: 句柄为了绑定到Point的对象上,必须定义一个辅助类UPoint,如果要求句柄绑定到Point的子类上,那就存在问题了。2、有没有更简单的办法呢? 句柄使用Point*直接绑定到Point对象上(包括子类),为了保持多个句柄引用计数的一致性,使用int* 指向...
阅读全文
posted @
2015-07-26 20:43
Andy Niu
阅读(333)
推荐(0) 编辑
【C++沉思录】句柄1
摘要:1、在【C++沉思录】代理类中,使用了代理类,存在问题: a、代理复制,每次创建一个副本,这个开销有可能很大 b、有些对象不能轻易创建副本,比如文件2、怎么解决这个问题? 使用引用计数句柄,对动态资源封装,句柄包含指针,多个句柄可以指向同一个对象。复制的时候,只是复制句柄的指针。3、使用引用计数句柄...
阅读全文
posted @
2015-07-26 20:41
Andy Niu
阅读(670)
推荐(0) 编辑
【C++沉思录】代理类
摘要:1、考虑下面的场景:设计一个容器,包含一组类型不同但相互关联的对象(比如:Animal,Dog,Cat),对象具备多态行为。2、容器一般只能包含一种类型的对象,使用vector 会造成对象切割,不具备多态行为。3、经典的解决办法是:vector, 但是这会增加内存管理的负担。考虑下面的情况: Dog...
阅读全文
posted @
2015-07-26 20:40
Andy Niu
阅读(701)
推荐(0) 编辑
C++ 代码换行
摘要:1、字符串太长,换行显示,怎么办?2、使用反斜杠,如下: string str = "abcd\ 1234"; 注意:反斜杠后面不准有任何字符。下一行开头的制表符不包含在整个字符串中,但是下一行开头的空格符包含在整个字符串中。3、使用双引号,如下: string str = "abcd" ...
阅读全文
posted @
2015-07-26 13:31
Andy Niu
阅读(14645)
推荐(0) 编辑
C 语言宏定义
摘要:C 语言宏定义1、例子如下: #define PRINT_STR(s) printf("%s",s.c_str()) string str = "abcd"; PRINT_STR(str); 结果如下:abcd2、现在我期望打印出,str=abcd, 容易想到的解决办法是: #define PRIN...
阅读全文
posted @
2015-07-26 13:28
Andy Niu
阅读(1218)
推荐(0) 编辑
函数调用的栈信息
摘要:/*1、栈在堆上面,栈的地址减少,堆的地址增加。2、方法的参数在栈上,参数是从右向左入栈,为什么? 主要是为了解决可变参数的问题,从右向左入栈,栈顶是第一个参数, 而第一个参数,指出了参数个数,或者推断出参数个数(printf 的格式化字符串)。 从栈顶开始,可以遍历这些参数。3、pa本身也分配在栈...
阅读全文
posted @
2015-07-26 13:21
Andy Niu
阅读(430)
推荐(0) 编辑
【S6】当心C++编译器最烦人的分析机制
摘要:1、考虑一个包含int的文件,复制到list,如下: ifstream dataFile("ints.bat"); list data(istream_iterator(dataFile),istream_iterator());2、上面的代码不是预期的行为。3、先从最简单开始,声明方法 int f...
阅读全文
posted @
2015-07-12 19:38
Andy Niu
阅读(461)
推荐(0) 编辑
MyISAM与InnoDB的索引实现
摘要:1、MyISAM 使用B+Tree 作为索引结构,叶子节点的data存放指针,也就是记录的地址。对于主键索引和辅助索引都是一样的。2、InnoDB 也使用B+Tree作为索引结构,也别需要注意的是,对于主键索引,InnoDB 使用聚集索引,InnoDB的数据文件本身就是就是索引文件。而MyISAM,...
阅读全文
posted @
2015-07-12 19:37
Andy Niu
阅读(1143)
推荐(0) 编辑
C++ 函数对象
摘要:1、考虑下面的需求,从集合中找到一个与当前Student相等的学生,如下:int main(int argc, char* argv[]){ Student s1(20,"Andy"); Student s2(23,"Bill"); Student s3(28,"Caroline"); Studen...
阅读全文
posted @
2015-07-05 19:08
Andy Niu
阅读(1618)
推荐(0) 编辑
ERROR 1201 (HY000) Could not initialize master info structure
摘要:1、错误原因:Slave线程启动出现问题。2、解决办法一:stop slave; reset slave; start slave; show slave status\G3、如果解决方法一,还是失败,说明中继日志出现问题,删除中继日志,再次执行start slave
阅读全文
posted @
2015-07-05 11:13
Andy Niu
阅读(840)
推荐(0) 编辑
C++ traits技术
摘要:1、技术的发明是为了某个问题,traits也是一样。考虑下面的需求。2、对两个变量相加,为了通用,使用模板方法,实现编译时多态。如下:template T Add(T a,T b){ //...}3、对于int,double实现是一样的,直接相加就行了。但是对于char*,我们期望内容相加,返回一个...
阅读全文
posted @
2015-07-05 10:37
Andy Niu
阅读(804)
推荐(0) 编辑
mysql 锁的粒度
摘要:1、锁的类型分为读锁和写锁,这个很好区分。可以这样认为:如果有增删改,就是写锁。如果是查询,就是读锁。2、锁的粒度也就是锁的范围,分为行锁和表锁。锁的范围和多个因素有关,包括事务隔离级别、是否使用索引。测试 read-committed,结果是行锁事务A:mysql> select @@sessio...
阅读全文
posted @
2015-07-05 10:32
Andy Niu
阅读(3660)
推荐(0) 编辑
C++ 对象的定义
摘要:1、考虑下面的方法void Print(const Student& s){ printf("Student[%s:%d]\n", s._Name.c_str(), s._Age);}2、方法Print接收一个Student对象,定义Student对象,并调用方法,有哪些方式?方式一: Stud...
阅读全文
posted @
2015-07-05 10:31
Andy Niu
阅读(612)
推荐(0) 编辑
C++ 函数适配器
摘要:1、考虑下面的需求,在一个int的vector中,找出一个比5的元素,容易想到的解决办法,定义一个方法对象,使用模板,如下:vector::iterator iter = find_if(intVec.begin(),intVec.end(),Finder(3));2、分析find_if的伪代码如下...
阅读全文
posted @
2015-07-05 10:30
Andy Niu
阅读(1588)
推荐(0) 编辑