shared_from_this with derived class
shared_from_this with derived class
我正在尝试使用shared_from_this函数为此创建共享 ptr。
#include <iostream>
#include <memory>
class foo {
public:
virtual void method() {
std::cerr << "foo::method()" << std::endl;
}
};
class foo_derived : public foo, public std::enable_shared_from_this<foo> {
public:
void method() override {
auto self(shared_from_this());
std::cerr << "foo_derived::method" << std::endl;
}
};
int main() {
foo_derived().method();
}
此代码从第 auto self(shared_from_this());
行引发bad_weak_ptr我认为问题在于自我是在派生类中创建的。我正在寻找这种行为的解释,并且还希望获得派生类的有效shared_from_this用法示例。
它与继承无关。以这种方式调用method
将起作用:std::make_shared<foo_derived>()->method();
CPP首选项标准::enable_shared_from_this::shared_from_this
只允许在以前共享的shared_from_this上调用 对象,即在由 std::shared_ptr 管理的对象上。否则 行为未定义(直到 C++17(std::bad_weak_ptr 被抛出(由 从默认构造的构造weak_this shared_ptr构造函数((因为 C++17(.
相关文章:
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- "Undefined class"作为is_base_of的论据
- 如何将class.cpp和class.hpp编译为一个.o文件
- 将sharet_ptr<Derived>转换为shared_ptr<Base>
- '{'标记之前的预期类名,然后在预声明时无效使用不完整的类型'class class_name'
- 从 std<Derived>::shared_ptr 的向量返回 std::shared_ptr<Base>
- 如何使用"derived input class"创建派生类?
- 错误:"Left of getValue must have class/struct/union"
- ' class a : b ' 和 ' class a : public b ' 之间的继承类不同
- Pybind11 Class Definition
- shared_from_this with derived class
- Distinc derived class C++
- "instantiating a derived class object" - C++
- 多态性>错误:'no known conversion from derived class to base class'
- 无法将"member pointer to derived class"转换为"member pointer to base class"
- 为什么C++不能用 "super class" 类型的右值初始化 "derived class" 类型的变量?
- Derived Class C++
- 英特尔C++编译器 (ICPC 14.0): "a derived class is not allowed here"