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;,但这是否必然会导致内容被复制?
答案 0 :(得分:2)
这样做是安全的。 Python在返回之前复制字符串的内容。这也适用于其他Python字符串操作。
通常,只有Python对象(PyObject *)的引用可能被借用或被盗,除非另有特别说明,否则解释器会复制参数。