与C函数混合时出现C++unique_ptr错误
C++ unique_ptr errors when mixing with C functions
我正在混合C和C++代码,遇到了一些问题。以下是无法编译的代码:
unique_ptr<char[]> buf(new char[buflen]);
snprintf(buf, buflen, procfd, fd);
导致错误:
wrapper_current.cpp:85:37:错误:无法将参数"1"的
‘std::unique_ptr<char []>’
转换为‘char*’
到‘int snprintf(char*, size_t, const char*, ...)’
我认为unique_ptr
看起来像是一个普通的指针,指向使用它的任何对象。有解决办法吗?如果使用snprintf
是不可能的,那么有没有一些C++方法可以模仿snprintf
?
简介
std::unique_ptr<T>
有重载,使其感觉像原始指针,但它不能隐式转换为T*
(因为它没有重载运算符T(。过载的相关运算符有:
operator[]
;用于访问底层资源的第N个元素(需要T[]
(operator->
;用于访问底层资源的成员,以及operator *
;用于获取对基础资源的引用
这些操作员充当"操作员";"代理人";对于底层资源,我们仍然在std::unique_ptr上调用它们,并且您的示例中的buf
将始终是std::unique_ptr
类型。
注意:unique_ptr可以显式转换为bool,这是为了使if (ptr) ...
和相关表达式成为可能;也就是说,在这种情况下,让它表现得像原始指针
解释/解决方案
printf相关函数被用于原始指针,这一点很明显,因为智能指针的一部分(函数最初来自哪里(。
如果您想获得std::unique_ptr当前管理的资源的原始指针,适合传递给printf时,请调用your_unique_ptr.get
,如下所示:
snprintf (buf.get (), buflen, procfd, fd);
相关文章:
- 为什么 std::unique 不调用 std::sort?
- CLANG 编译器 说:变量"PTR"可能未初始化
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 将 ptr 传递给 ptr 到 A 作为参数传递给 A 的函数是不好的做法吗?
- 为共享 ptr 向量实现复制 c'tor?
- 字符和整数中 **(ptr+1) 的值差异
- C++:在不中断共享的情况下通过引用传递共享 PTR?
- 生成"unique"矩阵
- 如何将派生类从基 ptr 分配给 nlohmann::json
- 引用 std::shared:ptr 以避免引用计数
- 我对 std::unique(算法)C++有问题
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- 尝试打印出 *ptr++ 的值,以了解它是如何工作的
- 如何控制共享 ptr 引用计数?
- std::shared_ptr::unique(),复制和线程安全
- 如何在C++03中用自定义谓词调用std::unique
- C++中的指针否定 (!ptr == NULL)
- C++14 unique_ptr并使用已删除的函数'std::unique-ptr' unique_ptr错误