【发布时间】:2017-05-30 09:07:42
【问题描述】:
我是 C++ 的初学者,对标头中声明的 const 指针的初始化感到困惑。仅举一个例子,我的标题中有一个结构和一个类,例如:
/* header file.h */
typedef struct A{ ... } A;
class myClass{
protected:
A *const myPtrA;
}
又想实例化myPtrA的内容,比如在构造函数中,知道A是一个由子结构组成的相当复杂的结构,需要动态实例化:
/* source file.cpp */
#include file.h
myClass::myClass() {
A *tmpA = new A;
*myPtrA = *tmpA;
}
这是初始化我的 const 指针 myPtrA 的好方法吗?如果每个新调用都需要一个专用的删除调用,我可以在 *myPtrA = *a; 行之后立即删除我的指针 tmpA 吗?没有丢失 myPtrA 指向的内容的风险?
提前感谢您的宝贵时间(请原谅我的英语;))
qroh
【问题讨论】:
-
Find a good beginners book 并了解构造函数初始化列表。
-
顺便说一下,在 C++ 中,
struct就像一个类,唯一的区别是默认可见性(public代表struct,private代表class)。这意味着您不需要typedef来获得struct。 -
typedef struct A { ... } A;是定义结构的 C 方式。在 C++ 中,您可以像对类一样定义它:struct A{...};。 C++ 中结构和类的唯一区别是默认可见性。 -
知道A是一个由子结构组成的相当复杂的结构,需要动态实例化 嗯..为什么不能在initializer list 通过构造函数的调用?你为什么认为,你需要在这里动态分配。注意:您显示的示例表现出未定义的行为,因为
myPtrA未初始化。不,*myPtrA = *tmpA;不是它的初始化。该行正在尝试 dereference 指针,该指针从未初始化。 -
为什么你一开始还有一个指针?
标签: c++ pointers constants initializing