gpt4 book ai didi

c++ - 智能指针 : set by reference, 重置、设置空值、空值检查或重置检查

转载 作者:行者123 更新时间:2023-11-30 01:21:13 25 4
gpt4 key购买 nike

我第一次在 C++ 中使用智能指针。我对 std::shared_ptr 有一些疑问:

  1. 通过引用设置指针:

    MyToy mytoy_1, mytoy_2;
    set_mytoy(mytoy_1, some_data);
    set_mytoy(mytoy_2, some_data);

    shared_ptr<MyToy> ptr_mytoy(&mytoy_1);
  2. 重置和新分配:

    ptr_mytoy.reset(&mytoy_2);
  3. 无赋值重置:

    ptr_mytoy.reset();
  4. 设置NULL (?):

    ptr_mytoy(nullptr);

这些例子对吗?

如何检查智能指针是否为“空”(例如,在 .reset() 之后)或者是否为 NULL

最佳答案

Are these examples right?

前两个是错误的:他们试图用对象而不是指针来初始化和重置 shared_ptr

更新:问题现已更改为将它们从指向自动变量的指针初始化。这仍然是错误的:shared_ptr 将要删除它们,并且删除任何不是使用 new 创建的内容都是错误的。

通常,该对象将使用 new 创建,尽管最好使用 make_shared 为您创建它:

// Good
auto ptr = make_shared<MyToy>();

// Not so good, but sometimes necessary
MyToy * mytoy_2 = new MyToy;
ptr.reset(mytoy_2);

第三个是正确的。它从指针释放对象,如果没有剩余指针则将其删除,并将指针留空。

第四个是可疑的还是错误的,这取决于 null_ptr 是什么。如果您指的是 nullptr,那么它是不正确的,不应编译。如果它是一个指向 MyToy 的空值指针,那么它会使 shared_ptr 非空,但也不拥有任何东西。

How can I check if a smart pointer is "empty" (for instance, after .reset())

if (ptr.use_count() == 0)

or if is NULL?

if (!ptr)

关于c++ - 智能指针 : set by reference, 重置、设置空值、空值检查或重置检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18321674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com