[英]Initializing a const pointer to a structure c++
我是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指出的内容的风险?
在此先感谢您的宝贵时间(请原谅我的英语;))
ro
*myPtrA = *tmpA;
这是初始化我的const指针myPtrA的好方法吗?
不。您根本没有初始化myPtrA
。 它是默认初始化的,因此具有不确定的值。 用不确定的值( *myPtrA
) *myPtrA
引用指针具有未定义的行为。
我可以在* myPtrA = * a行之后立即删除指针tmpA吗? 不会丢失myPtrA指出的内容的风险?
是的,这很安全。 通过指向的对象myPtrA
是一个通过指出的拷贝(通过分配) tmpA
。 但是,分配动态对象,先将其复制然后销毁它完全是没有意义的,因为您可以直接直接创建/修改副本。
这是如何正确初始化成员指针的示例:
class myClass{
protected:
A *const myPtrA = new A;
};
PS。 虽然学习如何执行此操作很有用,但几乎不应在实际程序中手动管理内存。 而是使用RAII容器,例如std::unique_ptr
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.