小编Csu*_*usz的帖子

在 postgresql 中使用 nanosec 存储时间戳的最优雅方法是什么?

不幸的是,postgresql 时间戳类型只能以微秒精度存储时间戳,但我也需要纳秒。

PostgreSQL - 8.5。日期/时间类型:

时间戳和间隔接受可选的精度值 p,它指定秒字段中保留的小数位数。默认情况下,没有明确的精度限制。对于时间戳和间隔类型,p 的允许范围是从 0 到 6。

我需要 7 个:

0,000 000 001 [十亿分之一]纳秒[ns]

0,000 001 [ 百万分之一 ] 微秒 [ µs ]

0,001 [千分位] 毫秒 [ ms ]

0.01 [百分之一] 厘秒 [ cs ]

1.0 秒 [ s ]

有没有优雅有效的方法来处理这个问题?

编辑:也许将时间戳存储在 bigint 中?

sql postgresql datetime timestamp date

6
推荐指数
1
解决办法
2361
查看次数

如何处理唯一指针的存储原始指针的所有权转移?

如何处理这样的场景:我有一个带有自定义删除器的唯一指针,但第 3 方库的函数需要一个原始指针,并且我使用 .get() 在 unique_ptr 中传递存储的指针,但该函数获取原始指针的所有权。

例子:

使用自定义删除器初始化唯一指针:

std::unique_ptr<BIGNUM, decltype(&BN_free)> r(BN_bin2bn(signature.data(), bnLen, nullptr), &BN_free);
std::unique_ptr<BIGNUM, decltype(&BN_free)> s(BN_bin2bn(signature.data() + bnLen, bnLen, nullptr), &BN_free);
Run Code Online (Sandbox Code Playgroud)

将它们传递给 ECDSA_SIG 函数,该函数获取 r 和 s 唯一指针的所有权:

ECDSA_SIG_set0(ecDsaSignature.get(), r.get(), s.get())) 
Run Code Online (Sandbox Code Playgroud)

在作用域末尾,调用自定义删除器,但由于 r 和 s 被移动,它崩溃了。我正在考虑使用原始指针,但是如果 ECDSA_SIG_set0 函数调用不成功会发生什么,我是否必须手动释放 r 和 s 变量?这是正确的方法,还是有更优雅的方法来处理这种情况?

先感谢您。

c++ pointers memory-leaks memory-management

0
推荐指数
1
解决办法
309
查看次数