递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 291|回复: 2
打印 上一主题 下一主题

[其它] 有没有一天,C++ 能支持 条件执行前 初始化?

[复制链接]

388

主题

1787

帖子

7192

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7192
QQ
跳转到指定楼层
楼主


瞎猜啊。毕竟有时候这样很管用。
我在封sha-2的时候发现这个问题。

不管 CryptGetHashParam执行是否成功,都必须释放:
            CryptDestroyHash(hHash);
            CryptReleaseContext(hProv, 0);


不同的是,失败了直接return,
而成功了,则直接返回 哈希值。
总的来讲,当下 必定存在2次释放。

专业承接18-98岁xx的心理及生理教育辅导。
回复

使用道具 举报

28

主题

2022

帖子

7370

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7370
板凳
发表于 3 天前 | 只看该作者
一、C++语法的问题在火山里讨论没有意义,我们又不可能改变它;
二、有创建就要有释放,和CryptDestroyHash、 CryptReleaseContext 对应的是 CryptCreateHash 和 CryptAcquireContext,当然是跟 CryptGetHashParam 的结果无关;
三、直接 return; 表示返回值是 void,你不可能又返回哈希值,C++不支持这种多返回值;

最后谈一下写法,最直观就是按流程线直接写下来,如果你不想写那么多次释放,用 goto 也并无不可。
如果想自动初始化和释放,其实也可以将哈希句柄封装成类,在构造函数里调用 CryptDestroyHash,在析构函数调用CryptDestroyHash,自然也可以做到自动初始化和释放。
但有这个必要吗?没有吧,你调用的也是封装后的命令,这些内部代码基本不会在外面使用了。
回复

使用道具 举报

75

主题

1102

帖子

4856

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
4856
沙发
发表于 3 天前 | 只看该作者
用预处理器? #if #elseif #else 这些?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2025-1-31 07:46 , Processed in 0.102415 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表