【发布时间】:2015-07-29 11:20:01
【问题描述】:
现在,我正在研究 smart_ptr (unique_ptr / shared_ptr)。我写了这样的测试代码来检查 unique_ptr 是否可以用作参数。
typedef struct __T_TEST
{
char cT1;
char cT2;
} T_TEST;
int main(...)
{
...
char szB[2] = {0x61, 0x62};
auto pTest = std::make_unique<T_TEST>();
std::memcpy(pTest, szB, 2);
printf("T1 = [%02x]\n", pTest->cT1);
printf("T2 = [%02x]\n", pTest->cT2);
return 0;
}
然后,我添加了一个使用 unique_ptr 作为参数的函数。
int TestPrint(std::unique_ptr<T_TEST> p_pData)
{
printf("T1 in TestPrint Func = [%02x]\n", p_pData->cT1);
printf("T2 in TestPrint Func = [%02x]\n", p_pData->cT2);
return 0;
}
我只是在 printf 之后在 main 函数中调用该函数。但它不起作用。
printf("T1 = [%02x]\n", pTest->cT1);
printf("T2 = [%02x]\n", pTest->cT2);
TestPrint(pTest); <- Can't pass the pTest!
return 0;
}
在这种情况下,我无法通过 pTest。为什么不?我认为 pTest 是 std::unique_ptr , p_pData 是 TestPrint 函数中的 std::unique_ptr 。所以是同一类型!!但我不能。我想知道为什么它不起作用。
当然,改成std::unique_ptr<T_TEST>& p_pData后就可以工作了。但是我不明白为什么尽管数据类型相同,但我不能传递参数。
【问题讨论】:
-
因为可复制的
unique_ptr现在不会很独特了吧?
标签: c++