c++ - Does std::move invalidate pointers? -
assume following:
template<typename item> class pipeline { [...] void connect(outputside<item> first, inputside<item> second) { queue<item> queue; first.setoutputqueue(&queue); second.setinputqueue(&queue); queues.push_back(std::move(queue)); } [...] std::vector<queue<item> > queues; };
will pointers queue still work in "first" , "second" after move?
the pointers not work, because queue
local object deleted @ end of connect
. using std::move
still create new object @ new memory location. try use as possible "old" object.
additionally whole thing not work @ independent of using std::move
push_back
possibly has reallocate. call connect
may invalidate old pointers.
a possible solution creating queue
objects on heap. following suggestion uses c++11:
#include <memory> template<typename item> class pipeline { [...] void connect(outputside<item> first, inputside<item> second) { auto queue = std::make_shared<queue<item>>(); first.setoutputqueue(queue); second.setinputqueue(queue); queues.push_back(queue); } [...] std::vector<std::shared_ptr<queue<item>>> queues; };
Comments
Post a Comment