"cedric paille" wrote: > I'm making python's modules to extend my application's functions with a built > in script editor. > At now all works very well, but i'd like to know if i'm not forgetting some > references inc/dec.... > > Here is a portion of my code: > > static PyObject * > Scene_GetNodeGraph(PyObject *self, PyObject *args) > { > NodeGraph* Ng = NodeGraph::GetInstance(); > std::vector<String> NodG; > Ng->GetNodeGraph(NodG); > PyObject* List = PyList_New(NodG.size());
after this operation, this function "owns" the object. you should check for a NULL value, though. PyList_New may fail. adding "if (!List) return NULL;" should do the trick. > PyObject* Str = NULL; > std::vector<String>::iterator it = NodG.begin(); > int i = 0; > for (;it != NodG.end();it++) > { > Str = PyString_FromString(it->AsChar()); after this operation, the function "owns" the string. you should check for a NULL value, though. PyString_FromString may fail (don't forget to release the list). > PyList_SetItem(List,i,Str); after this operation, the list "owns" the string. you should check the return value, though. PyList_SetItem may (in theory) fail. i++; } return List; this hands List ownership over to the caller. } > Can someone take a look at this and tell me if i must add some inc/decref ? the reference handling looks correct, but you might wish to add some error handling to avoid crashes under low-memory conditions. </F> -- http://mail.python.org/mailman/listinfo/python-list