大佬教程收集整理的这篇文章主要介绍了c – shared_ptr和this-pointer,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
class MyClass : public IObserver { public: MyClass (std::shared_ptr<SomeOtherClass> otherClass); void DoSomethingImportant(); private: std::shared_ptr<SomeOtherClass> m_otherClass; };
这个类在我的应用程序中使用如下:
std::shared_ptr<MyClass> myInstance(new MyClass(otherInstancE)); ... myInstance->DoSomethingImportant();@H_827_2@myClass获取另一个类的共享指针,并将其存储在m_otherClass数据成员中.
问题是registerObserver方法的定义如下:
void registerObserver(std :: shared_ptr observer);
它需要一个共享指针,但’this’是一个原始指针,而不是一个共享指针.
我看到三种解决方法:
>找到将普通指针转换为共享指针的技巧(参见问题convert pointer to shared_ptr),但该问题的答案仅建议复制共享指针,而不是如何将指针实际转换为共享指针.
>将共享指针传递给我们自己的方法,如下所示:“myInstance-> DoSomethingImportant(myInstancE);”这似乎有点愚蠢.
>将观察者部分放入一个单独的类中.这看起来有点矫枉过正,可能会使课程更难理解.
这个问题很明显,共享指针只是C的附加组件(我不认为你在C#(或一般的.Net)和Java等其他语言/环境中遇到同样的问题).
关于如何处理这种情况的任何其他建议或窍门?
请注意,在构造函数完全完成且对象已由另一个shared_ptr拥有之前,您不能使用shared_from_this.
struct test : boost::enabled_shared_from_this<test> { test() { // shared_from_this(this); // error,still not owned by another shared_ptr } boost::shared_ptr<test> shared() { return shared_from_this(this); } }; int main() { test * t = new test; // boost::shared_ptr<test> p = t->shared(); // error,not yet owned by other shared_ptr boost::shared_ptr<test> owner( t ); boost::shared_ptr<test> p = t->shared(); // [*] ok,"owner" owns the object }
[*]这部分示例很愚蠢,您可以将所有者复制到p中,而不是调用该方法.只是在测试方法中调用shared_from_this时可以注意到它.
以上是大佬教程为你收集整理的c – shared_ptr和this-pointer全部内容,希望文章能够帮你解决c – shared_ptr和this-pointer所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。