我可以使用指向其析构函数中被破坏对象的指针吗?

詹姆士

是否可以从其析构函数内的指针访问已破坏的对象是否定义为行为?是否保证对象仍位于该指针位置并且可以访问?例如,在下面的代码中,我销毁了a1,并在其析构函数内访问了指向a1的a2中的a1。

#include <iostream>

class A
{
public:
    A(int* i) : m_i(i) {}
    ~A();
    int* m_i;
};

A* a1;
A* a2;
int x = 0;

A::~A()
{
    *a2->m_i = 1;
}

int main()
{
    a1 = new A(&x);
    a2 = a1;
    delete a1;
    std::cout << x << std::endl;
    return 0;
}
Kyy13

如果expression不是非空指针,并且释放函数也不是销毁性删除(自C ++ 20起),则delete表达式将为销毁的对象或销毁的数组的每个元素调用析构函数(如果有)。 (从数组的最后一个元素到第一个元素)。

之后,无论是否有析构函数引发异常,delete表达式都会调用释放函数:运算符delete(用于表达式的第一版)或运算符delete [](用于表达式的第二版)

https://en.cppreference.com/w/cpp/language/delete

因此析构函数将在释放之前被调用。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以使用函数指针调用虚拟析构函数吗?

来自分类Dev

我可以使用指向静态函数的函数指针,例如指向非静态函数的函数指针吗?

来自分类Dev

我们可以使用尾随返回类型语法编写构造函数/析构函数吗?

来自分类Dev

指向数组的指针的析构函数

来自分类Dev

我可以使用指向类的指针吗?

来自分类Dev

可以使用类的内部析构函数重置值吗?

来自分类Dev

析构函数不会破坏对象

来自分类Dev

我可以遍历一个链表,其头节点位于其析构函数中吗?

来自分类Dev

指向包含std :: string的对象的指针上的无效指针调用析构函数

来自分类Dev

我可以在析构函数中使用未在头文件中定义的变量吗?

来自分类Dev

C++ 可以使析构函数不调用类成员的析构函数和基类的析构函数吗?

来自分类Dev

为什么在声明指向对象的指针时不调用析构函数

来自分类Dev

通过指向基的指针删除对象,而没有虚拟析构函数

来自分类Dev

在纯 C 中,我们可以使用指向 char 的指针而不是指向 void 的指针来实现泛型函数吗?

来自分类Dev

我可以通过deleteLater()将信号分配给旧对象的析构函数中的新对象吗?

来自分类Dev

我可以使用ObjectID设置解析对象指针吗

来自分类Dev

我们可以通过指向其基类之一的指针执行删除对象吗?

来自分类Dev

默认析构函数是否释放成员指针指向的内存?

来自分类Dev

可以使用std :: launder将对象指针转换为其封闭的数组指针吗?

来自分类Dev

我可以在该对象的构造函数中创建一个指向该对象的指针吗?

来自分类Dev

以优雅的方式管理指向游戏引擎中被破坏对象的指针

来自分类Dev

C ++如何使用破坏状态的析构函数处理对象的副本?

来自分类Dev

使用已删除或非用户提供的私有析构函数构造(但不破坏)类的对象

来自分类Dev

在Rust中可以使用指向临时对象的原始指针吗?

来自分类Dev

您可以使用取消引用来调用指向汇编中函数的指针吗?

来自分类Dev

我可以使用指向嵌套结构的指针作为接收器参数吗?

来自分类Dev

我可以使用带有C ++ 17的std :: any指向成员变量的指针吗?

来自分类Dev

我可以使用“ using”代替“ typedef”作为指向类成员变量的指针吗?

来自分类Dev

析构函数可以在const对象上调用非const函数吗?

Related 相关文章

  1. 1

    我可以使用函数指针调用虚拟析构函数吗?

  2. 2

    我可以使用指向静态函数的函数指针,例如指向非静态函数的函数指针吗?

  3. 3

    我们可以使用尾随返回类型语法编写构造函数/析构函数吗?

  4. 4

    指向数组的指针的析构函数

  5. 5

    我可以使用指向类的指针吗?

  6. 6

    可以使用类的内部析构函数重置值吗?

  7. 7

    析构函数不会破坏对象

  8. 8

    我可以遍历一个链表,其头节点位于其析构函数中吗?

  9. 9

    指向包含std :: string的对象的指针上的无效指针调用析构函数

  10. 10

    我可以在析构函数中使用未在头文件中定义的变量吗?

  11. 11

    C++ 可以使析构函数不调用类成员的析构函数和基类的析构函数吗?

  12. 12

    为什么在声明指向对象的指针时不调用析构函数

  13. 13

    通过指向基的指针删除对象,而没有虚拟析构函数

  14. 14

    在纯 C 中,我们可以使用指向 char 的指针而不是指向 void 的指针来实现泛型函数吗?

  15. 15

    我可以通过deleteLater()将信号分配给旧对象的析构函数中的新对象吗?

  16. 16

    我可以使用ObjectID设置解析对象指针吗

  17. 17

    我们可以通过指向其基类之一的指针执行删除对象吗?

  18. 18

    默认析构函数是否释放成员指针指向的内存?

  19. 19

    可以使用std :: launder将对象指针转换为其封闭的数组指针吗?

  20. 20

    我可以在该对象的构造函数中创建一个指向该对象的指针吗?

  21. 21

    以优雅的方式管理指向游戏引擎中被破坏对象的指针

  22. 22

    C ++如何使用破坏状态的析构函数处理对象的副本?

  23. 23

    使用已删除或非用户提供的私有析构函数构造(但不破坏)类的对象

  24. 24

    在Rust中可以使用指向临时对象的原始指针吗?

  25. 25

    您可以使用取消引用来调用指向汇编中函数的指针吗?

  26. 26

    我可以使用指向嵌套结构的指针作为接收器参数吗?

  27. 27

    我可以使用带有C ++ 17的std :: any指向成员变量的指针吗?

  28. 28

    我可以使用“ using”代替“ typedef”作为指向类成员变量的指针吗?

  29. 29

    析构函数可以在const对象上调用非const函数吗?

热门标签

归档