Get the App
SLTechnology News&Howtos  ›  Internet Technology  › 

The use of C++ Smart pointer weak_ptr

Shulou Source: shulou.com Published: 2022-06-02 04:21:54 09月13日 Update

This article introduces the knowledge of "the use of C++ smart pointer weak_ptr". In the operation of practical cases, many people will encounter such a dilemma, so let the editor lead you to learn how to deal with these situations. I hope you can read it carefully and be able to achieve something!

Smart pointer weak_ptr uses weak_ptr for: 1, to solve the problem of hanging pointer 2, to solve the problem of circular reference weak_ptr features: there is no * operation and-> operation weak_ptr is a smart pointer that does not control the life cycle of the object referred to, it points to an object managed by a shared_ptr. Binding a weak_ptr to a shared_ptr does not change the shared_ptr counter. Once the last shared_ptr pointing to the object is destroyed, the object is released, even if there is a weak_ptr pointing to the object. First, let's start with a table where the nagging weak_ptr operation function describes weak_ptr w empty weak_ptr, which can point to objects of type T*. Weak_ptr w (sp) and shared_sp sp point to the weak_ptr of the same object. T must be able to be converted to the type referred to by sp. W = pp can be a shared_ptr or a weak_ptr. After assignment, w points to the object referred to by p. W.reset () sets w to empty w.use_count () the number of shared_ptr shared with w object w.expired () returns true if w.use_count () is 0, otherwise returns falsew.lock () if expired () is true, returns an empty shared_ptr; otherwise returns a shared_ptr pointing to the object referred to by w. The small example indexing code block function describes that test1weak_ptr does not increase the reference count test2weak_ptr does not have-> and * operation test3lock uses test4 circular references, resulting in that even smart pointers cannot free memory. Use weak_ptr to solve the problem that memory cannot be freed due to circular references # include # include # include using namespace std; class Test {public: Test (int d = 0): data (d) {cout

Tags: Objects pointers intelligence pointing loops memory signification counters problems cased examples examples content functions more knowledge types practical identical learned and then Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno vpn Shulou Information Microsoft Shulou Technology Linux