gpt4 book ai didi

c++ - 保留指针地址(用作特殊情况)

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

执行以下操作是否安全?

MyClass* p = WantItInCase1();
if (p == NULL)
p = 0x1;
else
p = WantItInCase2();
if (p == NULL)
p = 0x2;
...
CheckCases (p); // we check '0x1' and '0x2' cases and otherwise process 'p' as normal object

我的情况是 MyClass 对象无法处理 CheckCases() 中所需的所有变体。那么为了避免额外的参数,是否可以使用这种方法?至少我需要一个不能用于分配的地址范围。

---更新---

考虑到答案,我决定采取一些“棘手”的方法:

// somewhere in global definitions:
const MyClass* P_CASE_1 = (MyClass*) new int;
const MyClass* P_CASE_2 = (MyClass*) new int;
...
// previous code piece:
MyClass* p = WantItInCase1();
if (p == NULL)
p = P_CASE_1;

这将是内存安全的,并且为每个 P_CASE_# 泄漏 4 个字节并不危险。

最佳答案

对于 GCC,这种分配是“默认”禁止的。由于标志 -fpermissive,您将不得不强制编译。

我认为这不是“好”。我更喜欢这种方法:

MyClass* p = WantItInCase1();
int flag;
if (p == NULL)
flag = 0x1;
else
p = WantItInCase2();
if (p == NULL)
flag = 0x2;
...
CheckCases (flag);

当然用了更多的“内存”,但是今天,4字节是多少?

所以回答你的问题,这种作业是非常不鼓励的......但你的程序可能会工作......

如果您尝试读取 p(在您的 checkclass 方法中),您将编写如下内容:

if(p == 0x1) ...

这种行将生成警告(使用 GCC),因为您将指针与整数进行比较,因此:一个警告 + -fpermissive 标志 = 不要那样做!

关于c++ - 保留指针地址(用作特殊情况),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9700555/

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