diff options
Diffstat (limited to 'boost/compute/iterator/buffer_iterator.hpp')
-rw-r--r-- | boost/compute/iterator/buffer_iterator.hpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/boost/compute/iterator/buffer_iterator.hpp b/boost/compute/iterator/buffer_iterator.hpp index cd68058f64..de2395a552 100644 --- a/boost/compute/iterator/buffer_iterator.hpp +++ b/boost/compute/iterator/buffer_iterator.hpp @@ -58,13 +58,20 @@ struct buffer_iterator_index_expr size_t index, const memory_object::address_space address_space, const IndexExpr &expr) - : m_buffer(buffer), + : m_buffer(buffer.get(), false), m_index(index), m_address_space(address_space), m_expr(expr) { } + ~buffer_iterator_index_expr() + { + // set buffer to null so that its reference count will + // not be decremented when its destructor is called + m_buffer.get() = 0; + } + operator T() const { BOOST_STATIC_ASSERT_MSG(boost::is_integral<IndexExpr>::value, @@ -73,10 +80,10 @@ struct buffer_iterator_index_expr return buffer_value<T>(m_buffer, size_t(m_expr) * sizeof(T)); } - const buffer &m_buffer; - size_t m_index; - memory_object::address_space m_address_space; - IndexExpr m_expr; + const buffer m_buffer; + const size_t m_index; + const memory_object::address_space m_address_space; + const IndexExpr m_expr; }; template<class T, class IndexExpr> |