将指针从C++传递给Python/w boost python?

A_K*_*A_K 6 c++ python boost boost-python

我正在使用Boost Python,我在C++中生成一个大的整数向量,我想在Python中访问这个向量而不复制它.

在C++中我有:

BOOST_PYTHON_MODULE(myModule)
{
    class_<vector<int>>("vectorInt").def(vector_indexing_suite<vector<int>>());
    def("ReturnVectorPtr", ReturnVectorPtr, return_value_policy<manage_new_object>());
}

vector<int>* ReturnVectorPtr()
{
    return new vector<int>();
}
Run Code Online (Sandbox Code Playgroud)

然后在python我有:

import myModule
myModule.ReturnVectorPtr()
Run Code Online (Sandbox Code Playgroud)

这会导致Python崩溃,尽管我甚至没有存储返回值.关于我的错误是什么想法?

编辑:

以下代码用于将向量中的数据从C++获取到python,但泄漏内存.是否复制了矢量然后没有处理?

在C++中:

BOOST_PYTHON_MODULE(myModule)
{
    class_<vector<int>>("vectorInt").def(vector_indexing_suite<vector<int>>());
    def("ModifyVectorInPlace", ModifyVectorInPlace);
}

void ModifyVectorInPlace(vector<int>& data)
{
    // Modify data...
    return;
}
Run Code Online (Sandbox Code Playgroud)

然后在python我有:

import myModule
vectorInt = myModule.vectorInt()
myModule.ModifyVectorInPlace(vectorInt)
Run Code Online (Sandbox Code Playgroud)

到底是怎么回事?

编辑2:

我从这里尝试了"Raw C++ Pointers"示例,完全如下所示:https: //wiki.python.org/moin/boost.python/PointersAndSmartPointers

它也崩溃了.似乎我无法获得指向任何因某些原因传入Python的指针......

编辑3:

崩溃似乎是来自invoke.hpp的段错误,在此函数中:

template <class RC, class F BOOST_PP_ENUM_TRAILING_PARAMS_Z(1, N, class AC)>
inline PyObject* invoke(invoke_tag_<false,false>, RC const& rc, F& f BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(1, N, AC, & ac) )
{
    return rc(f( BOOST_PP_ENUM_BINARY_PARAMS_Z(1, N, ac, () BOOST_PP_INTERCEPT) ));
}
Run Code Online (Sandbox Code Playgroud)

A_K*_*A_K 0

事实证明,这是 Mingw-w64 和 Python 交互中的一个错误。我执行了此处描述的过程并解决了问题:

http://ascend4.org/Setting_up_a_MinGW-w64_build_environment#Setup_Python_for_compilation_of_extensions