c++ - 以安全的方式从 char* 创建 std::string

标签 c++ exception

我有一个 char* p,它指向一个以 \0 结尾的字符串。如何以异常安全的方式从中创建 C++ string

这是一个不安全的版本:

string foo()
{
  char *p = get_string();

  string str( p );
  free( p );
  return str;
}

一个明显的解决方案是 try-catch - 有更简单的方法吗?

最佳答案

您可以使用 C++11 中的 shared_ptrBoost :

string
foo()
{
    shared_ptr<char> p(get_string(), &free);
    string str(p.get());
    return str;
}

这使用了 shared_ptr 的一个非常特殊的功能,这在 auto_ptr 或其他任何东西中都不可用,即指定自定义删除器的能力;在本例中,我使用 free 作为删除器。

关于c++ - 以安全的方式从 char* 创建 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/246445/

相关文章:

c++ - cout 输出乱码消息行而不是实际用户 cout 语句

c++ - Qt C++ 拆分类

c++ - 为什么 C++ 右值不是不可变的

c++ - 范围界定是访问虚拟功能的合法方式吗?

JavaScript 正则表达式忽略大小写异常(无效组)

python - 无法在 Python 中捕获异常 IndexError?

java - 删除实体会导致 hibernate 中的 ObjectDeletedException

C++ : calling BIOS interrupt 0x21

swift - Xcode macos swift屏保: configSheet doesn't show up on first click

c# - 从WPF(C#.Net)应用程序中的异常属性中识别异常起源