gpt4 book ai didi

c++ - 使用指向 vector 中元素的指针是否危险?

转载 作者:行者123 更新时间:2023-12-04 01:10:26 24 4
gpt4 key购买 nike

我有一个 vector ,里面装满了对象:

std::vector<MyClass> vec;
vec.push_back(MyClass("Hi", 10)); //example, could be any class

后来,当它被填充时,我想访问它:

for(unsigned int i = 0; i < vec.size(); i++)
{
MyClass *c = & vec.at(i); // <--- HERE
if(c) // <--- AND HERE
{
c->memberOfMyClass = x;
}
}

使用 c 是否比直接使用 vec.at(i) 更危险?我需要 if(c) 的保护吗? c 可以是 nullptr 吗?我想不会,因为 vector 确实接受对象,而不是指向对象的指针。

最佳答案

Is using c more dangerous than using vec.at(i) directly?

示例中没有。然而,它不必要地复杂。

Can c be nullptr?

不在示例中。

Do I need the protection with if(c)?

没有;见上文。

Is using a pointer to an elements in an vector dangerous?

使用指针——或任何其他形式的间接寻址——一般来说可能是“危险的”,因为指针和指向的对象的生命周期是分开的。因此,您必须知道指向对象的生命周期是多少,因为如果它比指针短,那么指针将处于“悬空”状态。错误地假设生命周期会导致未定义的行为。

一个错误程序的例子:

std::vector<MyClass> vec{
{"Hi", 10},
};
MyClass *c = &vec.at(0); // OK
vec.emplace_back("Hi again", 42); // c may be invalid now
c->memberOfMyClass = x; // potential undefined behaviour

关于c++ - 使用指向 vector 中元素的指针是否危险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65002950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com