在 C 风格的指针值中是垃圾,但在智能指针中是正确的

正义使者

我有那个 C++ 代码

#include <iostream>
#include <vector>
#include <memory>

struct Foo{
    int* a;

    Foo(std::vector<int> vec)
    {
        a = &(vec.front());
    }
};

struct Bar {
    std::unique_ptr<int> a;

    Bar(std::vector<int> vec)
    {
        a = std::make_unique<int>(vec.front());
    }
};

int main() {
    std::vector<int> vec = {42};
    Foo foo(vec);
    Bar bar(vec);
    // returns 0, but should 42
    std::cout << *foo.a << std::endl;
    // but this returns 42
    std::cout << *bar.a << std::endl;

    return 0;
}

为什么 *foo.a 返回 0,而不是 42?我究竟做错了什么?

安全性

线路更改Foo(std::vector<int> vec)Foo(std::vector<int>& vec),它会正常工作。看到它在这里工作

问题是这vec是一个局部变量,一旦函数调用返回它就不再有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

模板参数中的C ++智能指针

来自分类Dev

C ++中智能指针的悬挂参考

来自分类Dev

C ++中的智能指针和映射

来自分类Dev

C++中的智能指针删除

来自分类Dev

RAII和C ++中的智能指针之间的区别

来自分类Dev

C ++中的唯一/智能指针向量

来自分类Dev

在boost :: signals2中混合使用boost智能指针和C ++ 11智能指针

来自分类Dev

在boost :: signals2中混合使用boost智能指针和C ++ 11智能指针

来自分类Dev

指针向量中的C ++垃圾值

来自分类常见问题

与C ++中的普通指针相比,智能指针的开销是多少?

来自分类Dev

C ++中“低级”容器数据的原始指针,智能指针或std :: vector

来自分类Dev

C ++如何将智能指针传递到将修改指针的输出参数中

来自分类Dev

用C ++ 11中的智能指针包装旧的C结构并自动释放它们

来自分类Dev

用C ++ 11中的智能指针包装旧的C结构并自动释放它们

来自分类Dev

C ++ 11中用于图形表示的智能指针(顶点邻居)

来自分类Dev

在c ++智能指针实现中调用“运算符T()”

来自分类Dev

Objective-C ++中的智能指针可以完全替代ARC吗?

来自分类Dev

在 C++ 中为动态分配的数组使用智能指针

来自分类Dev

C中的指针(指针的值)?

来自分类Dev

C 中函数指针的正确值类型

来自分类Dev

C中结构内的功能指针

来自分类Dev

使用智能指针的C ++链接列表

来自分类Dev

C ++ 11智能指针的用法

来自分类Dev

C ++ 11智能指针语义

来自分类Dev

智能指针的C ++ 11向量

来自分类Dev

C ++智能指针循环链接

来自分类Dev

C ++ 11智能指针用例

来自分类Dev

指针在C中的值

来自分类Dev

c ++ 11-指针检查的性能差异-智能指针

Related 相关文章

热门标签

归档