gpt4 book ai didi

c++ - 为类的指针数据成员处理动态内存?

转载 作者:行者123 更新时间:2023-11-30 03:53:57 24 4
gpt4 key购买 nike

考虑下面的类

 class A
{
ClassF1 *ptrobjF1;
ClassF2 *ptrobjF2;
ClassF3 *ptrobjF3;

A()
{
ptrobjF1 = NULL;
ptrobjF2 = NULL;
ptrobjF3 = NULL;
}
};

在上面的类 A 中,我有 ClassF1、ClassF2 和 ClassF3 类的三个指针数据成员。只要需要,就会为此类分配内存。可能会出现只需要为 ptrobjF1 创建内存的情况(或者)可能会出现需要为所有三个成员创建内存的情况。

由于所有三个指针都是公共(public)的,因此使用该类的最终用户将访问它。

假设我正在为类中的一个数据成员 (ptrobjF1) 创建内存,而我将其他两个数据成员保留为 NULL。在这种奇怪的情况下,如果任何主体如下访问类外的数据成员

A obja;
(obja.ptrobjF3)->Some_function(); // Program crahses because dereferncing NULL

是否有任何设计模式可以避免访问未初始化的数据成员?

最佳答案

你可以使用异常

class WrongAccess
{};

class A
{
private:
ClassF1 *ptrobjF1;

public:
ClassF1* getF1()
{
if( ptrobjF1 )
{
return ptrobjF1;
}
else
{
throw WrongAccess();
}
}

A( )
{
ptrobjF1 = NULL;
}
};


A obja;
//Do something
...
try{

obja.getF1()->SomeFunc();
}
catch(WrongAccess &e)
{
///some handling
...
}

关于c++ - 为类的指针数据成员处理动态内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29845614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com