【发布时间】:2020-11-12 13:57:10
【问题描述】:
考虑以下 C++ 代码:
class B { ... }
class A {
public:
// Requires vec.size() >= 1
A(std::vector<B> vec) : vec_(vec), b_(&vec_[0]) {}
const std::vector<B> vec_;
const B* b_;
}
如果我 std::move 一个 A 类型的对象,甚至复制它,我指向 B 对象的指针 b_ 会保持稳定和有效吗?我原以为会是因为 vec_ 是 const,但事实并非如此。
【问题讨论】:
-
您的新构造函数,采用
std::vector<B>而不是B是有风险的。如果用户提供一个空向量怎么办? -
我明白,但这是一个关于指针稳定性的玩具示例,所以希望不变的注释有效。
-
如果您存储一个指向对象的指针,只要该对象继续存在,该指针就会继续指向该对象。这包括如果您离开它,因为该对象仍然存在。如果你复制它也一样。
标签: c++ pointers vector constants move-semantics