visual stdio调试中的数据类型可视化Debug Visualizers

前言 c++可以灵活自定义非常复杂的数据结构,比如标准库中的vector,map,还有很多是用户自定义的数据。通常调试器只能解释显示一些基本的数据变量,比如int,float,能够漂亮的显示标准库的那些类就算非常不错了,比如string。对于一些用户自定义的类型,往往调试器显示出来的变量值没有什么用,有时候就想能够自己自定义的方式友好的显示调试变量值。 之前vs是通过autoexp.dat的方式支持用户自定义显示变量值,如这篇博客所介绍的:Customize... Read More | Share it now!

chromium中使用WeakPtr

WeakPtr为其他对象想访问某个对象,却又不拥有或者增加该对象的引用计数提供了方法。WeakPtr不会影响指针所指向对象的生命周期。 通常WeakPtr与WeakPtrFactory搭配起来使用。WeakPtrFactory当作类的成员,可以通过WeakPtrFactory返回一个WeakPtr,如: 有点需要注意的是,类中WeakPtrFactory<Foo>... Read More | Share it now!

chromium中使用scoped_ptr

之前也总结过chromium中scoped_ptr的用法,我又看了下代码,chromium43对scoped_ptr又做了一些修改。我再写篇博客总结一下。写博客如果像代码管理系统一样有版本号,那就可以持续对一篇博客维护更新了。 scoped_ptr顾名思义,就是作用域中的智能指针。scoped_ptr获得一个指针指向对象的管理权,然后在scoped_ptr超出自己的作用域的时候自动销毁这个对象。 比如这个类: scoped_ptr不能拷贝或者赋值,所以只能用在它的构造函数或者调用reset方法去接管一个对象的指针。 调用reset方法,scoped_ptr会销毁现有指针指向的对象,然后再管理新的对象的指针。可以用get获得对象的原始指针。 scoped_ptr可以通过release的方法返回自己管理的指针,之后自己不再管理这个指针了。这种情形下用户需要自己管理对象的生命周期,返回的指针需要用户自己管理,或者交给其他智能指针管理。 其实scoped_ptr跟c++11中的unique_ptr是非常类似的,scoped_ptr也实现了“移动但不能拷贝”的属性。你可以通过移动来转移对象,从而可以避免构造临时对象。 你可以通过Pass方法把一个scoped_ptr“转移”给另一个scoped_ptr,之前说scoped_ptr是不能拷贝或者赋值的。 get,release,Pass三者区别是: get是获得原始指针,scoped_ptr还是继续管理着指针 release是获得原始指针,scoped_ptr不再管理指针 Pass是转移指针管理权到另外一个scoped_ptr,自己不再管理指针 Pass()可以正确的处理向上的类型转换,比如: 另外scoped_ptr还支持数组: base库还提供了make_scoped_ptr的函数从原始指针中创建并返回一个scoped_ptr。 此外chromium中还有个ScopedVector。这个是对vector容器的封装,使其可以存放并管理对象指针,在ScopedVector超出作用域的时候销毁指针所指向的对象。 ... Read More | Share it now!