diff --git a/modules/viz/include/opencv2/viz/widgets.hpp b/modules/viz/include/opencv2/viz/widgets.hpp index 01ed3ea8d..3f631c011 100644 --- a/modules/viz/include/opencv2/viz/widgets.hpp +++ b/modules/viz/include/opencv2/viz/widgets.hpp @@ -28,9 +28,6 @@ namespace cv class Impl; Impl *impl_; friend struct WidgetAccessor; - - void create(); - void release(); }; ///////////////////////////////////////////////////////////////////////////// diff --git a/modules/viz/src/widget.cpp b/modules/viz/src/widget.cpp index b3f147978..b0b76c435 100644 --- a/modules/viz/src/widget.cpp +++ b/modules/viz/src/widget.cpp @@ -7,47 +7,27 @@ class cv::viz::Widget::Impl { public: vtkSmartPointer prop; - int ref_counter; Impl() : prop(0) {} }; -cv::viz::Widget::Widget() : impl_(0) -{ - create(); -} +cv::viz::Widget::Widget() : impl_( new Impl() ) { } -cv::viz::Widget::Widget(const Widget& other) : impl_(other.impl_) +cv::viz::Widget::Widget(const Widget& other) : impl_( new Impl() ) { - if (impl_) CV_XADD(&impl_->ref_counter, 1); + if (other.impl_ && other.impl_->prop) impl_->prop = other.impl_->prop; } cv::viz::Widget& cv::viz::Widget::operator=(const Widget& other) { - if (this != &other) - { - release(); - impl_ = other.impl_; - if (impl_) CV_XADD(&impl_->ref_counter, 1); - } + if (!impl_) impl_ = new Impl(); + if (other.impl_) impl_->prop = other.impl_->prop; return *this; } cv::viz::Widget::~Widget() { - release(); -} - -void cv::viz::Widget::create() -{ - if (impl_) release(); - impl_ = new Impl(); - impl_->ref_counter = 1; -} - -void cv::viz::Widget::release() -{ - if (impl_ && CV_XADD(&impl_->ref_counter, -1) == 1) + if (impl_) { delete impl_; impl_ = 0;