我的代码中有一个错误,当放回到同一向量中时,它试图放回一些值。
#include <iostream>
#include <vector>
struct ComplexObject
{
// for display only
inline static int cpt {};
int indice {};
ComplexObject(std::vector<ComplexObject>& storage, int trick)
{
indice = cpt;
cpt++;
if (trick == 0 )
{
std::cout << "Creating single Object. Storage size: " << storage.size() << std::endl;
}
else
{
std::cout << "Creating double Object. Storage size: " << storage.size() << std::endl;
storage.emplace_back(storage, 0);
std::cout << "Storage size after double creation : " << storage.size() << std::endl;
}
}
};
int main() {
std::vector<ComplexObject> storage;
storage.reserve(3); // no realoction
storage.emplace_back(storage,0);
std::cout << "_________ size after insert simple : " << storage.size()<<"_________" << std::endl;
storage.emplace_back(storage,1);
std::cout << "_________ size after insert double :" << storage.size() << std::endl;
for (auto& e : storage)
{
std::cout << e.indice;
}
}
Run Code Online (Sandbox Code Playgroud)
我预计最后一个循环的结果类似于012或021
Clang 和 Gcc 得到不同的结果:
铿锵演示。输出 :
Creating single Object. Storage size: 0
_________ size after insert simple : 1_________
Creating double Object. Storage size: 1
Creating single Object. Storage size: 1
Storage size after double creation : 2
_________ size after insert double :2
02
Run Code Online (Sandbox Code Playgroud)
海湾合作委员会演示。输出 :
Creating single Object. Storage size: 0
_________ size after insert simple : 1_________
Creating double Object. Storage size: 1
Creating single Object. Storage size: 1
Storage size after double creation : 2
_________ size after insert double :3
020
Run Code Online (Sandbox Code Playgroud)
两者似乎都添加了元素1,然后用元素覆盖它2,但他们在向量的大小上存在分歧(我认为0gcc 中的最后一个是垃圾内存)
这段代码感觉很糟糕,但我无法在https://en.cppreference.com/w/cpp/container/vector/emplace_back中找到任何告诉我不应该这样做的内容。
这个代码是UB吗?
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |