2017-07-24 19 views
25

unique_ptr Dönüş const merak ediyorum bir hata alıyorum neden:C++ derlerken

const std::unique_ptr<int> get() { 
    return std::make_unique<int>(10); 
} 

int main() { 

    const std::unique_ptr<int> value = get(); 

    return EXIT_SUCCESS; 
} 

aşağıdaki hata alıyorum: Ben get imzadan const kaldırdığınızda

main.cpp: In function ‘int main()’: 
main.cpp:10:44: error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = int; _Dp = std::default_delete<int>]’ 
    const std::unique_ptr<int> value = get(); 

Bu doğru derler .

Sabit bir unique_ptr döndürmenin herhangi bir yolu var mı?

+2

Gerçek 'std :: unique_ptr' nesnesinin sabit olması mı, yoksa veriye mi işaret ediliyor? –

+0

Evet, gerçek 'std :: unique_ptr' nesnesinin sabit olması gerekiyordu. – jean553

+0

Niçin değiştirilebilecek veriler için sürekli bir işaretçiye ihtiyacınız var? Bu tuhaf. –

cevap

53

unique_ptr sabit olduğu için yalnızca kopyalanamaz. Ve bir unique_ptr kopyasına izin verilmez (aksi takdirde "benzersiz" olmaz).

İşaretçi tarafından işaret edilen veri sabit olmalı, bunun yerine std::unique_ptr<const int> kullanın.

+2

Sadece hızlı bir not: OP'nin örneği, garantili kopya seçiminden dolayı C++ 17'de derlemek zorunda. – bogdan

İlgili konular