指向成员变量的指针何时生效
When does a pointer to a member variable become valid?
假设我有以下类结构:
class A
{
public:
A(int test) : _test(test) { /* do nothing */ }
private:
int _test;
};
class B
{
public:
B(A* a) : _a(a) { /* do nothing */ }
private:
A* _a;
};
class C : public B
{
public:
C() : B(&a), a(5) { /* do nothing */ }
private:
A a;
};
在初始化a
之前,我调用构造函数以B
C
的成员变量a
的地址。因此,在我初始化B::*_a
之前,对a
的任何访问都是未定义的。但是,在初始化a
之前甚至将B::_a
设置为&a
也是未定义的行为吗?即,C::a
的内存是在调用构造函数时立即分配的,还是仅在调用构造函数的a(5)
指令时分配的?
指针本身在构造函数的开头生效。您可以获取它,并存储以备将来参考。您的代码是完全有效的。
但是,在初始化变量之前,B 或 A 的构造函数取消引用指向"a"的指针将是未定义的行为。
相关文章:
- 何时在引用或唯一指针上使用移动语义
- 如果非动态变量被指针引用,何时超出范围?
- 指针的 C++ 动态数组 - 何时需要使用它?
- 我可以有一个 ELI5 作为参考和指针以及何时使用它们吗?
- 何时返回指针与返回对象的一般经验法则?
- __unaligned说明符何时与指针一起使用?
- c++:何时传递指针与返回对象
- 何时/如何在使用指针后正确删除指针?
- 指向派生类的指针中的"static_cast<Base*>(static_cast<void*>(派生))"何时有效?
- 何时删除 try-catch 块中的指针
- C 何时将指针用于向量
- 我该如何允许类型的对象非专业化并在不使用指针的情况下识别何时是这种情况
- 我们可以使用指针和何时使用空参数
- 涉及继承,指针对象的交易以及何时进行的问题
- 带有矢量切片的矢量指针,用于从预序和顺序向量生成树
- 何时应存储指向函数的引用或指针?
- 指针到数组何时可以转换为不同类型的指针到数组?
- 何时使用共享指针向量,何时使用纯对象向量?
- c++右值和指针的指针何时应该使用它
- 指向成员变量的指针何时生效