boost和C++11中的智能指针shared_ptr很好用,但是在linux调试代码时发现,只能指针无法用gdb查看指针指向的变量,下面介绍两个方法查看只能指针指向的变量
1.shared_ptr有一个get方法,返回shared_ptr保存的真正的ptr,显示调用一下get()即可当做正常指针用了
2.有时候调用get方法无非获取到保存的指针,gdb提示init failed,这时候就只能用第二种方法了,如下例子:
class TestClassA
{
public:
string name;
};
typedef std::shared_ptr<TestClassA> TestClassAPtr;
void testFunc(TestClassAPtr test_ptr)
{
.....调试到这里了
}
想在testFunc中看一下test_ptr->name
但是直接在gdb中输入p test_ptr->name看不到结果
这样输入:
p ((TestClassA*)test_ptr)->name
即可看到name的值
原因如下:shared_ptr保存了真正的指针在此称作real_ptr,在shared_ptr中real_ptr是第一个变量,所以智能指针test_ptr和首地址即为real_ptr,利用强转将test_ptr转为TestClassA*,即可以TestClassA*类型访问到real_ptr了