【问题标题】:c++ setting only pointer of object to nullptr [closed]c ++仅将对象指针设置为nullptr [关闭]
【发布时间】:2017-10-03 12:27:50
【问题描述】:

假设我有一个数组a,它包含指向B 类对象的指针。假设a[0] 指向对象c。 如果我现在设置a[0] = nullptr,如果c 在堆栈上构造并且a[0] 是唯一引用c 的东西,那么cdestructor 是否会被调用并因此c 被销毁。

【问题讨论】:

  • 那些是智能指针吗?
  • 取决于范围(还有很多其他事情)。请添加一些实际代码,而不是对其进行描述。
  • 你所做的只是一个简单的任务。不会破坏对象(但可能是泄漏)。和int a; a = 5; a = 0;基本一样,如果对象c在栈上,那么超出范围就会被销毁。
  • 更大的问题:如果c 是在堆栈上构造的(并且尚未被销毁),那么数组中的指针怎么可能是唯一引用它的东西?
  • 请创建一个minimal reproducible example。不要描述代码。发布实际代码。

标签: c++ pointers stack


【解决方案1】:

如果您引用常规指针 (Obj* ptr),则不会调用 c 的 d'tor,因为赋值。如果有这样的代码,它可能会被调用 -

... // Some code and initialization before
{
Obj c;
a[0] = &c;
a[0] = NULL; //c isn't affected in any way by this assignment
} //End of scope. **c's d'tor is called here**

虽然,如果 c 被分配在堆上,它的内存就会泄漏

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-17
    • 2020-08-04
    • 2015-04-29
    • 2018-01-23
    • 2012-10-07
    • 2022-01-11
    • 1970-01-01
    • 2019-12-19
    相关资源
    最近更新 更多