繁体   English   中英

初始化指向结构C的const指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM