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

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -