我有一个主要的C ++类Test,其中的成员元素会被其他C ++类连续更改。这些其他类在构造函数中接收指向Test类的指针,它们应该作为成员保留。重要的是,这是一个指针,并且所有其他类都更改相同的Test对象。简化版本如下所示:
test.h
#ifndef TEST_H
#define TEST_H
class Test {
public:
int a;
Test();
Test * get_ptr(void);
int geta(void);
};
#endif // TEST_H
TEST.CPP
#include "test.h"
Test::Test() {this->a = 4;};
Test * Test::get_ptr(void) {return new Test;};
int Test::geta(void) {return a;};
changer.h
#ifndef CHANGER_H
#define CHANGER_H
#include "test.h"
class Changer {
public:
Test * t_p;
Changer(Test * t_ptr);
void plus1(void);
};
#endif // CHANGER_H
changer.cpp
#include "changer.h"
Changer::Changer(Test * t_ptr) {t_p = t_ptr;};
void Changer::plus1(void) {t_p->a += 1;};
boost.cpp
#include "test.h"
#include "changer.h"
#include "boost/python.hpp"
using namespace boost::python;
BOOST_PYTHON_MODULE(pnt) {
class_<Test>("Test")
.def("get_ptr", &Test::get_ptr, return_value_policy<manage_new_object>())
.def("geta", &Test::geta)
;
class_<Changer>("Changer", init<Test*>())
.def("plus1", &Changer::plus1)
;
}
这编译很好,但是当我在python中使用它时,我得到了这段代码的分段错误:
In [1]: import pnt
...: t = pnt.Test()
...: t.geta()
...: c = pnt.Changer(t.get_ptr())
...: c.plus1()
...: t.geta()
...:
Out[1]: free(): invalid pointer
Aborted (core dumped)
我从https://wiki.python.org/moin/boost.python/PointersAndSmartPointers得到了指针的部分,但我似乎无法让它工作。我非常感谢有关如何做到这一点的一些提示。