当将C++中的字符串分解为单独的行和参数(作为2D向量)时,当试图解析函数之间的向量时,可能会产生访问冲突的有趣问题。在代码示例中,多次尝试确保数据传递到和从函数中传递的是独立的对象,而不是引用。
segregate.hpp
#pragma once
#include <vector>
#include <string>
/*
Purpose:
To to take a whole file as a string,
and break it up into individual words
*/
namespace Segregate {
这里只是个初学者。
我试图在一个向量中存储一些对象,这样我可以在以后循环它,但是引用在之后发生了变化,我不确定发生了什么
代码如下;
#include <iostream>
#include <vector>
using namespace std;
class Car;
class Garage {
public:
vector<Car*> vCar;
};
class Car {
public:
short id;
};
int main()
{
Garage garage;
sho
据我所知,std::vector为它将包含的数据保留了一些内存,如果该内存已满,则将所有数据复制到一个新的更大的内存块中。
例如,如果向量包含2个元素,则内存如下所示:
DD--XX----- D for vector's data, - for empty, X for other data
如果我添加两个元素,它就会变成这样:
DDDDXX-----
但是,如果我尝试添加另一个元素,向量将复制所有元素并释放先前的内存:
----XXDDDDD
我说得对吗?
现在我不希望向量将成员复制到另一个内存块,所以我想知道他是什么时候这样做的。有可能吗?使用插
--开始编辑
User @User 17732522指出,调用UB的缺陷来自于pop_back()使根据vector库文档使用的引用无效。而且,当它发生时,不需要计算来检测它,因为它不是C++核心的一部分。
但是,@ also 17732522也指出了这个修复方法很简单。替换这两行连续代码的出现:
v.pop_back();
v.emplace_back(...);
用这两行:
std::destroy_at(&v[0]); // optional since A has a trivial destructor
std::construct_at<A, int>(&am
昨天我读了一位同事的代码,发现下面这段代码:
class a_class
{
public:
a_class() {...}
int some_method(int some_param) {...}
int value_1;
int value_2;
float value_3;
std::vector<some_other_class*> even_more_values;
/* and so on */
}
a_class a_instances[10];
void some_function()
{
我对指针有一个问题,它似乎指向错误的地址。我在联赛类中有一个函数来创建时间表:
void League::CreateSchedule()
{
for (int i = 0; i < allTeamsInLeague.size(); i++)
{
int tempDay = startingDay, tempMonth = startingMonth, tempYear = Time::GetInstance().GetYear();
for (int y = 0; y < allTeamsInLeague.size(); y++)
{