当前位置: 首页 > 知识库问答 >
问题:

什么时候访问指向“死”对象的指针是有效的?

龚征
2023-03-14

首先,澄清一下,我说的不是取消引用无效指针!

考虑以下两个例子。

例1

typedef struct { int *p; } T;

T a = { malloc(sizeof(int) };
free(a.p);  // a.p is now indeterminate?
T b = a;    // Access through a non-character type?
void foo(int *p) {}

int *p = malloc(sizeof(int));
free(p);   // p is now indeterminate?
foo(p);    // Access through a non-character type?

[3.17]不确定值-未指定值或陷阱表示

后来呢:

[6.2.4p2]当指针指向的对象达到其生存期的末尾时,指针的值就变得不确定。

所有这些加在一起,我们在访问指向“死”对象的指针时有什么限制?

共有1个答案

凌和颂
2023-03-14

简短回答:在C++中,没有访问“读取”类实例的说法;您只能“读取”非类对象,这是通过LValue到RValue的转换完成的。

详细解答:

typedef struct { int *p; } T;

t指定未命名的类。为了便于讨论,让我们将该类命名为T:

struct T {
    int *p; 
};
struct T {
    int *p; 
    T (const T&);
};
T a;
T b = a;    // Access through a non-character type?
inline T::T (const T& rhs) 
    : p(rhs.p) {
}
 类似资料:
  • 本文向大家介绍什么是指向指针的指针? 相关面试题,主要包含被问及什么是指向指针的指针? 时的应答技巧和注意事项,需要的朋友参考一下 指针指向的变量是一个指针,即具体内容为一个指针的值,是一个地址. 此时指针指向的变量长度也是4位.

  • 问题内容: 我习惯于进行Java编程,在编程时,您无需真正考虑指针。但是,此刻我正在用C ++编写程序。在创建具有其他类成员的类时,何时应该使用指针,何时不应该使用指针?例如,什么时候我想这样做: 与此相反: 问题答案: 首先避免指针。 在以下情况下使用它们: 您想使用Pimpl习惯用法或抽象工厂。 该实例实际上是由程序的其他部分管理的,而该类仅需要能够访问它。 您想推迟对象的构建(即,您想 在

  • 问题内容: 我来自没有显式指针的语言,因此我不太了解它们的存在重点(无双关语)。 问题是,在大多数情况下,我不知道为什么要传递指向函数的指针。我确实知道,当您传递一个指针时,到处都会对该变量进行修改,但这有什么意义呢?为什么不修改值并返回结果呢? 例如,是一个函数,该函数接收和作为参数。我读过接口实际上是指针(是吗?),但是我没有得到的是为什么? 为什么我要指向作家?我没有修改它,只是在写它。而且

  • 问题内容: 我正在学习Go,并且对何时使用指针有些困惑。具体来说,当从函数返回a 时,什么时候适合返回结构实例本身,什么时候适合返回指向该结构的指针? 示例代码: 在什么情况下我想返回一个指针,在什么情况下我 不 想要?有良好的经验法则吗? 问题答案: 您需要牢记两点:性能和API。 如何使用汽车?它是具有状态的对象吗?它是一个大结构吗?不幸的是,当我不知道什么是汽车时,不可能回答。说实话,最好的

  • 问题内容: 使用Go编程语言;指针如何变得有用? (如果它们没有真正的用处,为什么不非法呢?) 问题答案: 任何数据类型的有用性取决于要解决的问题和用于解决该问题的方法。如果数据类型不适合该问题,那么它根本就不适合该问题,仅此而已。 Go编程语言(以及大多数其他编程语言)基于程序员可以用来构建新数据类型的 简单 规则。其中一些规则是: :创建一个指向T的新数据类型 :Ts数组 :包含T作为组成部分

  • 假设有一个结构 我得到一个指向该结构的成员的指针,比如作为某个函数的参数: 如何获取指向包含对象的指针?最重要的是:在不违反标准中的某些规则的情况下,也就是说,我想要标准定义的行为,而不是未定义或实现定义的行为。 附带说明:我知道这规避了类型安全。