正确地为其他对象创建共享指针
Properly create shared pointer for other objects
我正在尝试使用一个共享指针,该指针将在整个程序中共享给不同的对象。我注意到,当我在给需要它的对象之前创建指针时,没有数据。这可能与我如何实现指针有关。我已经添加了一个我正在尝试做的示例,以及正在发生的事情
int main() {
// This would be the data I want to share. For simplicity
// using a vector of ints
std::vector<int> data;
// Create the shared pointer
// The objects that are getting access are not allowed to change the
// the data so thats why I put in const (could be wrong on what that is
// actually doing)
std::shared_ptr<const std::vector<int>> pointer_to_vector =
std::make_shared<std::vector<int>>(data);
// Add data to the object wanting to share
data.push_back(1);
data.push_back(2);
data.push_back(3);
data.push_back(4);
// If I look at pointer_to_vector in debu at this point it shows no
// data, size 0
}
如果我在添加数据(push_back)后创建共享指针(pointer_to_vector),它可以工作。然而,如果我想在程序的后面向向量中添加数据,指针将不会更新,因此对象无法访问新数据。是我做错了什么,还是我的理解根本就错了?
data
与std::make_shared<std::vector<int>>(data);
创建的实例无关。
你真正需要的是
std::shared_ptr<const std::vector<int>> pointer_to_vector =
std::make_shared<std::vector<int>>(data);
// Add data to the object wanting to share
pointer_to_vector->push_back(1);
pointer_to_vector->push_back(2);
pointer_to_vector->push_back(3);
pointer_to_vector->push_back(4);
用std::make_shared<std::vector<int>>(data)
创建的向量需要一个副本进行初始化。然而,这两个实例仍然是不相关的。
代码:
std::vector<int> data;
auto pointer_to_vector = std::make_shared<std::vector<int>>(data);
创建一个新对象,该对象是 data
的副本,并返回一个指向它的共享指针。然后将元素添加到data
中,但不添加到新向量中。
但是,如果你写:
auto pointer_to_vector = std::make_shared<std::vector<int>>();
auto& data = *pointer_to_vector;
则有一个新创建的向量,data
是对该对象的引用。后者看起来更接近您的预期。
相关文章:
- 如何从具有移动语义的类对象中生成共享指针
- 使用共享指针的函数调用,其对象应为 const
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 如何访问由共享指针保存的类方法?
- 从矢量或地图中删除共享指针
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 使用共享指针实现复制 c'tor?
- 共享指针继承,而不先显式强制转换
- 如何检查类中共享指针的有效性?
- std::排序在共享指针的向量上
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 嵌套类、继承和C++中的共享指针
- 制作一对共享指针并推送一个向量
- 如何将共享指针用作函数参数
- 是否可以/希望创建不可复制的共享指针模拟(以启用weak_ptr跟踪/借用类型语义)?
- 尝试通过共享指针使用变量时读取访问冲突
- 如何将元素插入到标准::地图的共享指针中?
- 共享指针生存期
- 初始化可变数据结构中的共享指针向量
- 阻止在返回时复制共享指针