ホームページ  >  記事  >  バックエンド開発  >  C++ スマート ポインターはどのようにして標準テンプレート ライブラリ (STL) に統合されますか?

C++ スマート ポインターはどのようにして標準テンプレート ライブラリ (STL) に統合されますか?

WBOY
WBOYオリジナル
2024-06-02 09:56:57295ブラウズ

C++ スマート ポインターは STL に統合されているため、ポインターの管理が容易になり、メモリの問題が回避されます。 STL には 4 つのスマート ポインタ タイプが含まれています。 std::unique_ptr: 一意に所有されているオブジェクトを指します std::shared_ptr: 複数所有されているオブジェクトを指します std::weak_ptr: 無効な可能性のあるオブジェクトへの弱い参照を指します std::auto_ptr (非推奨)

C++ 智能指针如何集成到标准模板库 (STL) 中?

C++ スマート ポインターが標準テンプレート ライブラリ (STL) に統合される方法

C++ のスマート ポインターは、ポインター管理を簡素化し、メモリ リークやダングリング ポインターなどの問題を回避するように設計されています。使いやすさを考慮して、スマート ポインターは標準テンプレート ライブラリ (STL) に統合されています。

スマート ポインターのタイプ

STL にはスマート ポインターの 4 つのタイプがあります:

  • std::unique_ptr: 固有に所有されるオブジェクトを指します
  • std::unique_ptr:指向唯一所有权对象
  • std::shared_ptr:指向多重所有权对象
  • std::weak_ptr:指向潜在无效对象的弱引用
  • std::auto_ptr:已废弃,不建议使用

集成到 STL

智能指针已集成到 STL 中,这意味着您可以针对任何 STL 容器使用它们。例如:

// 使用 unique_ptr 存储整数
std::vector<std::unique_ptr<int>> int_ptrs;

// 使用 shared_ptr 存储字符串
std::list<std::shared_ptr<std::string>> str_ptrs;

实战案例

假设我们要创建一个包含文件路径的容器。我们可以使用智能指针来确保在容器的生存期内文件路径对象不会被意外销毁。

#include <vector>
#include <memory>

class FilePath {
public:
    FilePath(const std::string& path) : path_(path) {}
    ~FilePath() = default;

private:
    std::string path_;
};

int main() {
    // 使用 unique_ptr 存储 FilePath 在 vector 中
    std::vector<std::unique_ptr<FilePath>> file_paths;
    file_paths.emplace_back(std::make_unique<FilePath>("path/to/file1"));
    file_paths.emplace_back(std::make_unique<FilePath>("path/to/file2"));

    // 使用 FilePath 对 vector 进行迭代,不会出现悬垂指针
    for (auto& file_path : file_paths) {
        std::cout << file_path->path_ << std::endl;
    }

    return 0;
}

这段代码使用 std::unique_ptr 来管理 FilePathstd::shared_ptr code>: 複数所有権オブジェクトへのポイント

std::weak_ptr: 無効な可能性のあるオブジェクトへの弱い参照🎜std:: auto_ptr: 非推奨、非推奨 🎜STL に統合🎜🎜スマート ポインタは STL に統合されており、任意の STL コンテナに対して使用できることを意味します。例: 🎜rrreee🎜実際的なケース🎜🎜 ファイル パスを含むコンテナを作成するとします。スマート ポインターを使用すると、コンテナーの存続期間中にファイル パス オブジェクトが誤って破棄されないようにすることができます。 🎜rrreee🎜 このコードは、std::unique_ptr を使用して FilePath オブジェクトを管理します。コンテナがスコープ外になると、スマート ポインタはコンテナが指すオブジェクトを自動的に破棄し、メモリ リークが発生しないようにします。 🎜

以上がC++ スマート ポインターはどのようにして標準テンプレート ライブラリ (STL) に統合されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。