指针的向量,推入元素的语法
Vector of Pointers, syntax for pushing element
vector<thread>* myVector;
是我用来声明线程指针向量的。
thread* new_thread = new thread(chef_thread,&kill, new std::mutex, &foodQ,
numberChefs); //New Thread
myVector->push_back(*new_thread);
Chef_Thread是我在上面同一个.cpp文件中声明的一个函数。
我试着编译代码,结果一切都糟透了。谢谢!
vector<thread>* myVector;
声明了一个指向thread
s的vector
的指针。
您正在寻找的类型是vector<thread*>
,它声明了thread
指针的vector
。
user2899162在指出代码中的即时错误方面是正确的。然而,我怀疑是否有必要使用指针。
作为一般规则:您不应该在程序中使用原始的(即手动键入的)new
和delete
。因为那是手工资源管理,你会弄错。使用RAII代替,即依赖构造函数和在对象作用域结束时自动执行析构函数来避免手动资源管理。[1]
std::vector<std::thread> threads;
threads.push_back(std::thread(
chef_thread,
&kill,
std::mutex(), // this is weird, see below
&foodQ,
numberChefs));
一旦threads
超出作用域,所有的线程和互斥对象以及向量本身将自动销毁。
奇怪的是:独立互斥锁(代码中的new std::mutex
参数)。这将创建一个只有chef_thread
函数知道的互斥对象。我们需要更多的代码才能确定,但我觉得这里有错误。互斥锁是共享资源的一种同步机制。所有访问资源的人都必须通过同一个互斥锁访问。但如果只有一个函数知道互斥锁,这怎么可能呢?我看到的唯一方法是从chef_thread
内部传递一个指向互斥锁的引用或指针,这本身就是一个危险信号。
[1]当然也有例外。最明显的一个是包装器/容器类,它的构造函数中有new
,析构函数中有相应的delete
。简而言之,这就是你如何实现RAII,这就是所有std
容器,智能指针和其他资源包装器的工作方式。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 1d 智能指针不适用于语法 (*)++
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 助记符和指向成员语法的指针
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- C++如何通过用户输入删除列表元素
- QMetaObject invokeMethod的基于函数指针的语法
- lower_bound()返回最后一个元素
- 为什么具有两个元素的发起器语法将一个元素而不是两个元素放入字符串向量中?
- 在C 中,可以用语法[i,j,..]实现访问数组元素的功能,而语法就像numpy中的ndarray样式一样
- C++中与模板相关的语法元素的名称分类
- 将xml字符串嵌套到xml元素中的语法
- 使用 foreach 语法迭代时如何检查我是否在最后一个元素上
- 访问双元素集合中的另一个元素的简洁语法是什么?
- 指针的向量,推入元素的语法
- 向vector添加可变大小元素列表的语法糖