代码之家  ›  专栏  ›  技术社区  ›  user

PyErr_SetString的字符串参数:它被借用了吗?

  •  2
  • user  · 技术社区  · 10 年前

    PyErr_SetString如何处理传入的c字符串?例如,这样做是否安全:

    {
      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 表示它“转换为字符串对象”,但这是否必然意味着内容将被复制?

    1 回复  |  直到 10 年前
        1
  •  2
  •   sterin    10 年前

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

    通常,只有对Python对象(PyObject*)的引用可能被借用或窃取,除非另有明确规定,否则解释器会复制参数。