Google Mock和shared_from_this出错了吗?

时间:2012-01-24 23:04:02

标签: c++ shared-ptr googlemock

我在测试中遇到以下错误:

  

未知文件:错误:带有描述的C ++异常   测试体中抛出“tr1 :: bad_weak_ptr”。

一次单步测试一行,我可以看到异常被抛到我打电话的那一行:

MyClassSharedPointer myClassPointer(shared_from_this());

我需要一个指向代码执行对象的指针,因为我需要将对象设置为其中一个成员的观察者(使用boost :: signals来实现观察者)。代码似乎在正常执行时工作正常,但是从我的测试代码中我得到了这个错误。

2 个答案:

答案 0 :(得分:1)

问题是,在我的生产代码中,myClass对象被引用为shared_ptr,而在我的测试代码中,我错误地将myClass对象声明为裸指针。这解释了shared_from_this()无效的原因......因为this实际上并不是shared_ptr。

答案 1 :(得分:0)

对我来说,问题在于myClass在调用shared_ptr之前没有shared_from_this(正在unique_ptr中使用)。并且shared_from_this要求至少已经创建一个shared_ptr。另请参见this answer