2014-09-03 20 views
5

Bạn có thể sử dụng quyền sở hữu hiệp phương sai cho các loại chung chung (thông qua các mẫu) trong C++ không?C++ Mẫu hiệp phương sai

Tôi đã tìm thấy this question câu trả lời cho câu hỏi của tôi, nhưng tôi hỏi lại vì đã hai năm rồi! Trong nghiện, mặc dù nó được giải thích rằng có thể không có hiệp phương sai trong C++ trong các mẫu, không có lời giải thích về điều đó!

Bạn có thể giúp tôi về tin tức/giải thích về chủ đề này không?

+2

Bạn nên thêm một mẫu mã cho những gì bạn gọi là "mẫu hiệp phương sai": câu trả lời của câu hỏi liên quan vẫn áp dụng – quantdev

+3

Nếu một số xây dựng có mục đích không phải là một phần của ngôn ngữ, bao nhiêu "giải thích" sẽ làm hài lòng bạn về sự vắng mặt của nó từ ngôn ngữ? Không phải là "nó không tồn tại" đủ? –

+1

"Trong nghiện ..." typo, hoặc chỉ không thể có đủ mã hóa? Hmmm ... – WhozCraig

Trả lời

4

Với tham chiếu đến câu hỏi trước đó làm thiết bị làm rõ, có vẻ như bạn đang hỏi tại sao T<Derived> thường không bắt nguồn từ T<Base>.

Cân nhắc T = std::shared_ptr.

Bạn không muốn để có thể làm điều này:

void foo(shared_ptr<Base>& p) { p.reset(new Derived2); } 

auto main() -> int 
{ 
    shared_ptr<Derived1> p; 
    foo(p); // Oops, p now points to unrelated Derived2 
} 
Các vấn đề liên quan