#include <iostream>
#include <memory>

namespace rocksdb {
	class DB {
	public:
		virtual ~DB() = default;
		virtual void doIt() = 0;
		static void Open(DB **db);
	};

	class DB_Impl : public DB {
	public:
		DB_Impl() { std::cout << "Created" << std::endl; }
		~DB_Impl() { std::cout << "Destroyed" << std::endl; }
		void doIt() override {}
	};

	void DB::Open(DB **db) {
		*db = new DB_Impl;
	}
}

int main() {

	std::unique_ptr<rocksdb::DB> _db;

	rocksdb::DB* db;
	rocksdb::DB::Open(&db);
	_db.reset(db);

	return 0;
}