小编Pis*_*ers的帖子

C 编程中的这些代码行是否相同

这两行代码相同吗?

第 1 行:

void (**foo)(int)
Run Code Online (Sandbox Code Playgroud)

2号线

void *(*foo)(int)
Run Code Online (Sandbox Code Playgroud)

请帮助我了解正在发生的事情。

c

4
推荐指数
1
解决办法
68
查看次数

当原始指针传递到其构造函数时,unique_ptr 正在复制

我试图了解现代 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));没有任何改变。

c++ c++11 c++14

1
推荐指数
1
解决办法
613
查看次数

标签 统计

c ×1

c++ ×1

c++11 ×1

c++14 ×1