Boost Python-C++类的私有静态数据在访问Python之前被吹走?

我已经使用Boost Python将C ++类暴露于Python.班上,
假设它称为实体,包含私人静态数据,
一系列字符串.尽管我认为它使用MFC实现了
cptrarray.
我也暴露了实体的公共功能 - 假设它是
称为foo.此功能访问私有静态数据(字符串
大批).
我有多个存储在自定义C ++容器中的实体实例,
这也被暴露于Python作为类实体列表.
在Python,我从实体名单中检索一个实体:
elist = entityList()
Elist.Append(Entity())
Elist.Append(Entity())
实体= elist.get_at(0)
entity.foo()
但是由于私有静态数据为空,因此在foo()内崩溃.或者
而是字符串数组为空.我在那之前知道
私有静态数据是有效的,当时由C ++代码访问为
该程序正常工作.它只是从Python起作用,所以以某种方式
私人静态数据已被吹走了,但我无法弄清楚哪里或
为什么.
静态数据是在初始化时设置的 - 我的python代码仅是
初始化完成后很长时间称为.
我在转储的实体类中添加了一个静态转储()函数
字符串数组,即使我只是在Python中进行以下操作:
entity.dump()
在Python中,私有静态数据为空.从C ++做同样的事情
工作正常.诡异的.
我知道这是一个不可能提出的问题,但是任何人都可以想到
我需要看一些明显的事情?
谢谢

# 回答1


>
可能是一生的问题.附加的签名是什么?
谁在C ++代码中删除附录实体?
如果Append采用原始指针,请Boost.Python复制指针,但
破坏实体对象,因为它是暂时的及其参考
计数为零.因此,列表中的指针是指
破坏物体,导致不确定的行为.
您是否看过boost.python的终身政策?这
解决问题的最简单方法是使用const参考
参数,并始终使用价值语义.如果可以导致
绩效惩罚,另一种简单的方法是使用共享_ptr,
有自己的参考数数(与Cpython中的参考数数不同
lib),但是boost.python做了魔术,使他们一起工作.
hth,
Giuseppe
# 回答2


谢谢.也许这是一个DLL边界问题?我也会调查一下.
在7月5日,11:14*下午,Giuseppe Ottaviano 可能是一生的问题.附加的签名是什么? *
谁在C ++代码中删除附录实体?
如果Append采用原始指针,请Boost.Python复制指针,但 *
破坏实体对象,因为它是暂时的及其参考 *
计数为零.因此,列表中的指针是指A *
破坏物体,导致不确定的行为.
您是否看过boost.python的终身政策?这 *
解决问题的最简单方法是使用const参考 *
争论,并始终使用价值semanti CS.如果可以导致 *
绩效惩罚,另一种简单的方法是使用共享_ptr,它 *
有自己的参考数数(与Cpython *不同的参考数数 *不同
lib),但是boost.python做了魔术,使他们一起工作.
hth,
朱塞佩
# 回答3


我想知道这是否是DLL边界问题.
在7月5日,11:14*下午,Giuseppe Ottaviano 可能是一生的问题.附加的签名是什么? *
谁在C ++代码中删除附录实体?
如果Append采用原始指针,请Boost.Python复制指针,但 *
破坏实体对象,因为它是暂时的及其参考 *
计数为零.因此,列表中的指针是指A *
破坏物体,导致不确定的行为.
您是否看过boost.python的终身政策?这 *
解决问题的最简单方法是使用const参考 *
参数,并始终使用价值语义.如果可以导致 *
绩效惩罚,另一种简单的方法是使用共享_ptr,它 *
有自己的参考数数(与Cpython *不同的参考数数 *不同
lib),但是boost.python做了魔术,使他们一起工作.
hth,
朱塞佩
# 回答4


可能是边界问题吗?静态数据由
应用.当Python模块试图访问时,出现了问题
它.
在7月5日,11:14*下午,Giuseppe Ottaviano 可能是一生的问题.附加的签名是什么? *
谁在C ++代码中删除附录实体?
如果Append采用原始指针,请Boost.Python复制指针,但 *
破坏实体对象,因为它是暂时的及其参考 *
计数为零.因此,列表中的指针是指A *
破坏物体,导致不确定的行为.
您是否看过boost.python的终身政策?这 *
解决问题的最简单方法是使用const参考 *
参数,并始终使用价值语义.如果可以导致 *
绩效惩罚,另一种简单的方法是使用共享_ptr,它 *
有自己的参考数数(与Cpython *不同的参考数数 *不同
lib),但是boost.python做了魔术,使他们一起工作.
hth,
朱塞佩
# 回答5


糟糕 - 我没有看到我的帖子,所以我以为出了问题,
重新发布.为多个帖子道歉.
在7月9日,11:57*AM,Stodge

标签: python

添加新评论