我遇到了一个奇怪的问题,不幸的是,我无法在应用程序本身之外进行复制。情况如下。我有以下结构。
struct Foo {
std::string first;
std::string second;
bool flag;
float value;
};
我的一个班级有一个成员std::vector<Foo> fooList
,该成员定期进行以下一组操作。
void someOperation() {
UpdateFooList(); //< Updates existing members of fooList
UseFooList(); //< Do some useful stuff with the new values.
fooList.clear();
// Repopulate fooList which is where the problem is. The call below
// has never worked here. It results in either junk values
// in fooList[0] or some of the member values at [0] before the clear() call
// appear to be retained after the emplace_back
fooList.emplace_back(Foo{"First", "Second", true, 0.0f});
}
这是我尝试过的东西。
fooList
的任何地方插入互斥锁。Foo(const std::string&, const std::string&, bool, float)
的4值ctor,并使用此ctor代替了brace-init-list。这里没有运气。emplace_back
替换为push_back
。这也没有帮助。在应用程序中似乎唯一起作用的是如果我用以下两行替换了emplace_back
。
auto fooEntry = Foo{"First", "Second", true, 0.0f};
fooList.push_back(fooEntry); //< This works as expected.
fooList.emplace_back(fooEntry); //< This also works as expected
对fooList.emplace_back(Foo{"First", "Second", true, 0.0f});
的内联调用为何无效的任何想法吗?
我在gcc-7.2.0
上,并且该应用程序是根据c++14
标准进行编译的。
虽然此信息位可能无关紧要,但为了完整性起见,请在此处添加。所考虑的类使用c++14
进行编译并通过.so文件公开,而应用程序本身使用c++17
进行编译并加载.so。所考虑的班级成员不会暴露在班级外部。只是类方法是公共的。