Tôi là C++ 11-ing một số mã. Tôi cóSử dụng unique_ptr cho quyền sở hữu và con trỏ thô nếu không?
class X { /* */ };
class A {
std::vector<X*> va_x;
};
class B {
std::vector<X*> vb_x;
std::vector<A> vb_a;
};
X * s của "va_x" bên trong lớp học của tôi Một điểm để các đối tượng cũng được trỏ đến bởi X * s của "vb_x" bên trong lớp B. tôi
Bây giờ tôi sẽ thích sử dụng con trỏ thông minh. Đối với tôi, có vẻ như rõ ràng rằng lớp B có quyền sở hữu của các đối tượng được trỏ bởi X * (đặc biệt là vì A trường hợp của tôi thuộc về B)
Vì vậy, tôi nên sử dụng một unique_ptr cho X bên B:
class B {
std::vector<unique_ptr<X>> vb_x;
std::vector<A> vb_a;
};
Câu hỏi của tôi là, tôi nên làm gì cho lớp A? Tôi có nên giữ nguyên con trỏ không? Bằng cách làm như vậy, trong các thử nghiệm đơn vị của tôi, tôi phải thừa nhận rằng nó dẫn đến mọi việc tồi tệ (IMO), ví dụ (đừng lo lắng về đóng gói, đó không phải là điểm):
unique_ptr<X> x(new X());
A a;
a.va_x.push_back(&(*x)); //awkward, but what else can I do?
A.vb_a.push_back(a); //ok
B.vb_x.push_back(move(x)); //ok
Đối với các câu hỏi trong tương lai về C++ 11, vui lòng gắn thẻ chúng với C++. :) – Xeo
Bạn đã không hỏi một câu hỏi gần như giống hệt nhau chưa? – Puppy
@DeadMG Vâng trước đó cũng là về unique_ptr nhưng điều này không phải là cùng một điều tôi nghĩ rằng –