blob: fc8c471db8e0147759878c35214d9f3db12fbac2 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_VIEWS_WIDGET_UNIQUE_WIDGET_PTR_H_
#define UI_VIEWS_WIDGET_UNIQUE_WIDGET_PTR_H_
#include <memory>
#include "ui/views/views_export.h"
namespace views {
class Widget;
// Ensures the Widget is properly closed when this special
// auto pointer goes out of scope.
class VIEWS_EXPORT UniqueWidgetPtr {
public:
UniqueWidgetPtr();
// This class acts like a std::unique_ptr<Widget>, so this constructor is
// deliberately implicit.
UniqueWidgetPtr(std::unique_ptr<Widget> widget); // NOLINT
UniqueWidgetPtr(UniqueWidgetPtr&&);
UniqueWidgetPtr& operator=(UniqueWidgetPtr&&);
~UniqueWidgetPtr();
explicit operator bool() const;
Widget& operator*() const;
Widget* operator->() const;
void reset();
Widget* get() const;
private:
class UniqueWidgetPtrImpl;
std::unique_ptr<UniqueWidgetPtrImpl> unique_widget_ptr_impl_;
};
} // namespace views
#endif // UI_VIEWS_WIDGET_UNIQUE_WIDGET_PTR_H_