Hỏi về smart pointer std::unique_ptr

Xin chào mọi người, em đang làm một số bài tập thì bỗng dưng gặp unique_ptr, em có lên google xem mà vẫn chưa hiểu gì hết. Nó được sử dụng thế này:

typedef int Distance;
typedef int Vertex;
class StlHeap
	{
	public:
		using T = std::pair<Distance, Vertex>;
		using Queue = std::priority_queue<T, std::vector<T>, std::greater<T>>;

		StlHeap() {
			queue.reset(new Queue());
		}

		bool empty() const {
			return queue->empty();
		}

		void update(Vertex v, Distance d) {
			queue->push(std::make_pair(d, v));
		}

		void clear() {
			queue.reset(new Queue());
		}

		std::pair<Distance, Vertex> pop() {
			std::pair<Distance, Vertex> top = queue->top();
			queue->pop();
			return top;
		}

	private:
		std::unique_ptr<Queue> queue;
	};

Mong các anh chị xem và giải thích giúp em về smart pointer trong ví dụ trên với ạ. Em xin cảm ơn nhiều.

Bạn có thể đọc ở đây nhé.
Nếu thấy hay thì hãy thanks tác giả.

3 Likes

Cảm ơn anh, bài viết rất cụ thể dễ hiểu, có ví dụ rõ ràng, nhưng mà em thấy sao unique_ptr này ít khi được sử dụng nhỉ.

ít tại trường ko dạy

lên github project mới toàn xài smart pointers thôi :V

cơ mà cái class StlHeap thì chứa thẳng Queue queue; luôn, đâu cần con trỏ gì ở đây :V

5 Likes

Cái này nó nằm trong starter file á anh :v em cũng không biết nữa.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?