/*
 * \brief  Non-copyable objects design pattern.
 * \author Stefan Kalkowski
 * \date   2012-02-16
 */

/*
 * Copyright (C) 2012 Genode Labs GmbH
 *
 * This file is part of the Genode OS framework, which is distributed
 * under the terms of the GNU General Public License version 2.
 */

#ifndef _INCLUDE__UTIL__NONCOPYABLE_H_
#define _INCLUDE__UTIL__NONCOPYABLE_H_

namespace Genode {

	/**
	 * Classes of objects not allowed to be copied, should inherit from this one.
	 *
	 * This class declares a private copy-constructor and assignment-operator.
	 * It's sufficient to inherit private from this class, and let the compiler
	 * detect any copy violations.
	 */
	class Noncopyable
	{
		private:

			Noncopyable(const Noncopyable&);
			const Noncopyable& operator=(const Noncopyable&);

		protected:

			Noncopyable()  {}
			~Noncopyable() {}
	};
}

#endif /* _INCLUDE__UTIL__NONCOPYABLE_H_ */