我试图绑定一个静态函数,该函数返回指向另一个类的shared_ptr。
这是示例代码
class Example {
public:
Example() {}
~Example() {}
};
class ABC {
public:
static std::shared_ptr<Example> get_example() {std::make_shared<Example();}
};
void init_abc(py::module & m) {
py::class_<Example>(m, "Example")
.def(py::init<>());
py::class_<ABC>(m, "ABC")
.def_static("get_example", &ABC::get_example);
}
这是python方面
example = my_module.ABC.get_example()
但是,python方面抛出了分段错误。
有什么主意吗?
答案 0 :(得分:0)
您应该使class Example
公开继承自std::enable_shared_from_this<Example>
。
std::enable_shared_from_this
允许当前由名为t
的{{1}}管理的对象std::shared_ptr
安全地生成其他pt
实例std::shared_ptr
,{ {1}},...都与pt1
共享pt2
的所有权。
注意:
t
标头才能使用pt
您需要在<memory>
成员函数
std::enable_shared_from_this
语句
return
答案 1 :(得分:0)
您的代码中有些遗漏的地方,例如>
。这是工作示例:
class Example {
public:
Example() {}
~Example() {}
};
class ABC {
public:
static std::shared_ptr<Example> get_example() { return std::make_shared<Example>();}
};
接下来,在包装shared_ptr<Example>
类的位置提供其他模板参数Example
:
py::class_<Example, std::shared_ptr<Example>>(m, "Example")
.def(py::init<>());
py::class_<ABC>(m, "ABC")
.def_static("get_example", &ABC::get_example);
这样shared_ptr<Example>
将得到正确处理。