我使用SWIG生成包装器。所以我需要一个函数
%inline %{
// Serializes into a string
void* SerCmd(Class *v, int *length, char *str)
{
QByteArray ba;
QDataStream out(&ba, QIODevice::WriteOnly);
out << *v;
*length = ba.size();
str = new char[ba.size()];
memcpy(str, ba.constData(), ba.size());
return str;
}
%}
这个函数是从python调用的,但是谁在删除我用new分配的内存呢?python是为我这样做的还是如何实现的?你知道吗
谢谢!你知道吗
如果这不能回答你的问题,我就把它去掉。但根据这里的SWIG信息:
http://www.swig.org/Doc1.3/Library.html#Library_stl_cpp_library
可以使用
std::string
来代替手动分配内存。考虑到这些信息,这很可能是可以使用的。你知道吗既然您注意到
std::string
可以包含空值,那么正确的处理方法就是使用string::append()
函数。你知道吗http://en.cppreference.com/w/cpp/string/basic_string/append
请注意上面链接中的
4)
项(空字符完全可以)。请注意,std::string
与C字符串不同,它不是通过空字符决定大小的。你知道吗现在,要获取这些数据,请使用
string::data()
函数和string::size()
函数来告诉您字符串中有多少数据。你知道吗我也不知道SWIG,但既然你问,“python是为我做的还是如何实现的?”你知道吗
Python垃圾收集删除那些不再在范围内的东西,即不再有任何指向它的东西。但是,它不能删除它不知道的内容。这些文件可能有用。你知道吗
以下是有关内存管理工作原理的文档: https://docs.python.org/2/c-api/memory.html
下面是gc模块的文档,帮助您更好地控制这个过程。 https://docs.python.org/2/library/gc.html
相关问题 更多 >
编程相关推荐