然而,多继承在 C++ 中存在一些限制和潜在问题,如菱形继承导致的二义性问题。此外,多继承也使得类的结构变得更加复杂,增加了维护和理解的难度。 3. enable_shared_from_this在多继承环境中的潜在问题 在多继承环境中使用 std::enable_shared_from_this 可能会遇到以下问题: 二义性问题:如果多个基类都继承了 std:...
同时,__enable_weak_this使用 SFINAE 实现了一个模板匹配,即:只有当满足__enable_if_t<is_convertible<_OrigPtr*, const enable_shared_from_this<_Yp>*>::value, int> = 0时(即对应类可以转换成 enable_shared_from_this,也就是类 public 继承了 enable_shared_from_this), 才会设置__weak_this_。 ...
简单来说就是,继承自std::enable_shared_from_this<T>的类能够在其自身实例中通过std::shared_from_this方法创建一个指向自己的std::shared_ptr<T>智能指针。 想要理解std::enable_shared_from_this<T>,首先得知道为什么需要std::enable_shared_from_this<T>,请看下文。 使用"std::enable_shared_from_this"...
std::enable_shared_from_this是以奇异递归模板(CRTP)实现的一个模板类。在日常开发中,我们可以继承...
从上面的代码中可以看出,share_ptr是std::enable_shared_from_this的友元类,实际上在上面的代码中,对智能指针进行初始化时除了完成_myCar1的初始化外,还做了额外的工作,既通过前面std::enable_shared_from_this的继承使得后面对智能指针进行初始化时同时初始化了弱指针。
第一个代码实现用来设置继承自std::endable_shared_from_this<T>的内部成员变量__weak_this_,主要代码逐行解释如下: 代码行11:判断入参__e指针是否有效以及__e入参内部的变量__weak_this_是否指向有效对象(在这里指的是是否指向了自身所在的对象)。如果入参指针有效并且__weak_this_未被设置过,则接着设置入...
按照enable_shared_from_this - C++ Reference (cplusplus.com)文档介绍:继承std::enable_shared_from_this的子类,可以使用shared_from_this成员函数获取自身的shared_ptr指针;该类提供了允许继承类的对象创建指向自身实例的shared_ptr,并且与存在shared_ptr对象共享所有权。什么意思呢?我们接下来通过代码进行介绍。
这就是std::enable_shared_from_this<T>发挥作用的地方。公开继承std::enable_shared_from_this的类可以通过调用方法shared_from_this()获得指向自己的shared_ptr。以下是它的一个基本示例: 代码语言:javascript 复制 #include<memory>struct Foo:std::enable_shared_from_this<Foo>{std::shared_ptr<Foo>getSelf...
将代码改写成这样,先公有继承这个模板类。 这里需要注意,在你通过shared_from_this()返回一个类的shared_ptr时,该对象必须已经被一个shared_ptr所管理,所以你不能直接csp2 = cp->get_ptr(),要在此之前先有csp1(cp)。 这样的话,借助shared_from_this(),可以使得该对象只要引用计数不为零,就任意获取它的一...
std::shared_ptr<Good> getptr() { return shared_from_this();//继承了一个方法,用弱针实现 }//从此共享,代表这是已生成的共享,在总计数里面不应该+1,否则引用计数不对.用弱针(未加0)实现. }; struct Bad { // 错误写法:用不安全的表达式试图获得 this 的 shared_ptr 对象 ...