代码编辑:https ://gcc.godbolt.org/z/x3hnj46WY
场景 -1 试图通过引用(或指针)传递原始指针无法使用 & 将 get() 的值传递给 setBuffer() // 编译错误:lvalue required as unary '&' 操作数
场景 -2 通过获取原始字符指针分配值返回 使用 & 将字符指针传递给 setBuffer()
注意:setBuffer() 存在于 C 库中我正在使用此 API https://www.libssh2.org/libssh2_session_last_error.html来获取 errmsg,而不是使用 char 数组缓冲区,我想使用 char 数组的智能指针。
#include <string.h>
#include <iostream>
#include <memory>
int setBuffer(char ** ptr) {
// ASSUMPTION: *ptr has sufficient memory to store copied data
strcpy(*ptr, "sample string");
return 0;
}
int main()
{
std::unique_ptr<char []> lup = std::make_unique<char []>(1024);
memset(lup.get(), 0 , 1024);
strcpy(lup.get(), "sample string - 1");
std::cout << lup << '\n'; // c++20
// SCENARIO - 1 | Compilation error
setBuffer(&lup.get()); // CE: lvalue required as unary '&' operand
// SCENARIO - 2 | Works fine
char * lp = lup.get();
setBuffer(&lp);
std::cout << lup << '\n'; // c++20
return 0;
}