PyErr_SetString的字符串参数:它是借来的吗?

时间:2014-07-27 22:05:14

标签: python python-c-api

PyErr_SetString如何处理传入的c-string?例如这样做是否安全:

{
  int age = 12;
  std::stringstream ostr; ostr << "I'm " << age << " years old and what is this?";
  PyErr_SetString(PyExc_RuntimeError, ostr.str().c_str());
}

显然https://docs.python.org/2/c-api/exceptions.html#PyErr_SetString表示已将其转换为字符串对象&#39;,但这是否必然会导致内容被复制?

1 个答案:

答案 0 :(得分:2)

这样做是安全的。 Python在返回之前复制字符串的内容。这也适用于其他Python字符串操作。

通常,只有Python对象(PyObject *)的引用可能被借用或被盗,除非另有特别说明,否则解释器会复制参数。