次の問題にどう対処したらいいのかしら。C ++クラス内には、補助PyObjectポインターがあります。
class Foo
{
public:
// Should I new the dictionary here in constructor?
Foo()
{
}
// Must decrease the reference count or explicitly delete the dictionary?
~Foo()
{
Py_DECREF(myDictionary);
}
void sync()
{
myDictionary = PyDict_New();
for (int i=0; i<myInternalData.size(); i++)
{
PyObject *key = PyInt_FromLong(i);
PyObject *val = PyInt_FromLong(myInternalData.at(i));
PyDict_SetItem(dict,key,val);
Py_DecRef(key);
Py_DecRef(val);
}
}
private:
PyObject *myDictionary;
std::vector<int> myInternalData;
}
私のC++コードでは、myInternalData
構造が時々更新またはサイズ変更されており、Pythonディクショナリの適切なメモリ割り当てに対処する方法を知りたいです。
std::vector
関連付けられているメモリの割り当てを解除する方法や、ヒープを破損したりメモリリークを引き起こしたりせずに、内部との同期を正しく維持する方法がわかりません。
Python C APIに役立つものはありますか?PyDictの割り当てを解除してPyObject_Del
から、再度再割り当てする必要がありますか?別のアプローチを提案している人はいますか?