这两行代码相同吗?
第 1 行:
void (**foo)(int)
Run Code Online (Sandbox Code Playgroud)
2号线
void *(*foo)(int)
Run Code Online (Sandbox Code Playgroud)
请帮助我了解正在发生的事情。
我试图了解现代 C++ 中唯一指针的工作原理。
当我浏览文档(cppreference 和其他文档)时,我能够理解这unique_ptr将转移所有权而不是共享它。但我不明白为什么unique_ptr在使用传递到其构造函数的原始指针时表现得很奇怪。
例如:
#include <iostream>
#include <memory>
class foo{
int x;
public:
foo(): x(0) {}
foo(int a): x(a) {}
foo(const foo& f): x(f.x) {}
};
int main(){
foo *ptr = new foo(5);
std::unique_ptr<foo> uptr(ptr);
std::cout << ptr << "\n";
std::cout << uptr.get() << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
0x5c7bc80
0x5c7bc80
Run Code Online (Sandbox Code Playgroud)
查询:
=delete)?为什么原始指针打印的地址与 相同unique_ptr?unique_ptr?std::make_unique()?我尝试更改线路std::unique_ptr<foo> uptr(ptr);但std::unique_ptr<foo> uptr(std::make_unique<foo>(*ptr));没有任何改变。