📜  c++ const shared_ptr - C++ (1)

📅  最后修改于: 2023-12-03 14:39:49.540000             🧑  作者: Mango

C++ const shared_ptr

在C++中,std::shared_ptr是一个智能指针,它提供了对动态分配的对象的共享所有权和自动内存管理。const修饰符用于指定对象或指针为只读,即不允许修改它们的值。在本文中,我们将探讨如何在C++中使用const修饰符与shared_ptr一起使用。

使用const修饰的shared_ptr可以分为两种情况:const shared_ptrshared_ptr<const T>。两者之间的区别在于是否可以修改指针指向的对象。

const shared_ptr

const shared_ptr是一个指向常量对象的智能指针,它的指针值不可修改。也就是说,无法通过改变指针的方式来指向不同的对象。然而,它所指向的对象本身是可以修改的。下面是一个演示const shared_ptr的示例代码:

const std::shared_ptr<int> ptr = std::make_shared<int>(10);
*ptr = 20; // 错误!无法修改常量对象的值

在上面的代码中,我们试图修改ptr指向的int对象的值,但这是不允许的。由于ptr是一个const shared_ptr,它的指针值不可变。

shared_ptr<const T>

shared_ptr<const T>是一个指向常量对象的智能指针,既无法修改指针的值,也无法修改所指向对象的值。下面是一个使用shared_ptr<const T>的示例:

std::shared_ptr<const int> ptr = std::make_shared<const int>(10);
*ptr = 20; // 错误!无法修改常量对象的值

在上述示例中,我们试图通过指针ptr来修改所指向的int对象的值,但是这是不允许的。由于ptr是一个shared_ptr<const int>,既无法修改指针的值也无法修改所指向对象的值。

总结

通过使用const修饰shared_ptr,我们可以限制对指针值和所指向对象的修改,确保其只读性。这在程序设计中可以起到一定的保护作用,并且也有助于编写更可靠和安全的代码。

请注意,尽管shared_ptr可以共享所有权,但是当其声明为const时,其他指向相同对象的shared_ptr也必须声明为const,以避免破坏只读性。

注:对于std::unique_ptr,无法直接创建const unique_ptr,因为unique_ptr的所有权规则使得只能有一个指向同一对象的unique_ptr。因此,使用const修饰的unique_ptr没有实际意义。