gpt4 book ai didi

与 C 函数混合时出现 C++ unique_ptr 错误

转载 作者:太空狗 更新时间:2023-10-29 23:33:03 26 4
gpt4 key购买 nike

我正在混合使用 C 和 C++ 代码,但遇到了问题。以下是无法编译的代码:

unique_ptr<char[]> buf(new char[buflen]);
snprintf(buf, buflen, procfd, fd);

导致错误:

wrapper_current.cpp:85:37: error: cannot convert ‘std::unique_ptr<char []>’ to ‘char*’ for argument ‘1’ to ‘int snprintf(char*, size_t, const char*, ...)’

我认为 unique_ptr看起来像是指向任何正在使用它的东西的普通指针。有解决方法吗?如果使用 snprintf不可能那么是否有一些 C++ 方法可以模拟 snprintf

最佳答案

简介

std::unique_ptr<T>有重载让它感觉像一个原始指针,但它不能隐含地变成T* (因为它没有重载运算符 T)。相关的重载运算符是:

  • operator[] ;用于访问底层资源的第 Nth 元素(需要 T[]);
  • operator-> ;用于访问底层资源的成员,以及;
  • operator * ;用于获取对底层资源的引用。

这些运算符充当底层资源的“代理”,我们仍在 std::unique_ptrbuf 上调用它们在您的示例中,类型始终为 std::unique_ptr .

注意:unique_ptr 可以显式转换为bool,这是为了使 if (ptr) ... 成为可能及相关表达; IE。让它在这种情况下表现得像一个原始指针


解释/解决方案

printf 相关函数可以与原始指针 一起使用,这很明显,因为智能指针 甚至不是C 的一部分(函数最初来自的地方)。

如果你想得到一个 原始指针std::unique_ptr 当前管理的资源,适合传递给 printf,调用 your_unique_ptr.get 如下所示:

snprintf (buf.get (), buflen, procfd, fd);

关于与 C 函数混合时出现 C++ unique_ptr 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24165556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com