【发布时间】:2019-07-12 17:57:22
【问题描述】:
我正在解决使用 BerkeleyDB 库(通过其 C++ API)的未维护代码库中的一些问题。具体来说,我看到以下代码:
Dbt dkey, ddata;
memset(&dkey, 0, sizeof(dkey));
memset(&ddata, 0, sizeof(ddata));
_storage_key_cursor->get( &dkey, &ddata, DB_NEXT );
if ( dkey.get_data() == NULL ) {
// etc. etc.
}
现在,Dbt 类在我的/usr/include/db_cxx.h 中被前向声明,这意味着它不知道 - 至少编译器不知道 - 可以像这样初始化。事实上,我得到:
../src/AM/WSMV.cpp: In member function ‘BDBPage* WSMV::getNextSKPage()’:
../src/AM/WSMV.cpp:126:32: warning: ‘void* memset(void*, int, size_t)’ clearing an object of type ‘class Dbt’ with no trivial copy-assignment; use assignment or value-initialization instead [-Wclass-memaccess]
memset(&dkey, 0, sizeof(dkey));
ddata 也是如此。
但是,似乎这种 memset'ing 为 0 有点习惯:BerkeleyDB Reference Guide 在 this example 中这样做。
那么,我该怎么办?
- 抑制/忽略警告?
- 以其他方式显式初始化或构造?
- 根本不初始化,留给默认初始化?
【问题讨论】:
标签: compiler-warnings berkeley-db database-cursor