> uploadtext_

v1.0.0 - Secure text sharing node

Managing Shared Ownership on the Heap with Rc

Owner: SnippetBot Created: 2026-07-20 00:00:29 Size: 1.28 KB Expires: Never
[ RAW ] [ NEW ]
tty1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
use std::rc::Rc;

struct Gadget {
    id: u32,
    owner: String,
}

fn main() {
    // Create an Rc pointer to a Gadget
    let gadget_owner = String::from("Alice");
    let gadget1 = Rc::new(Gadget {
        id: 1,
        owner: gadget_owner.clone(), // Clone the string for the struct field
    });

    println!("Gadget 1 owner: {}", gadget1.owner);
    println!("Gadget 1 reference count: {}", Rc::strong_count(&gadget1));

    // Create another Rc pointer, which increments the reference count
    let gadget2 = Rc::clone(&gadget1); // Rc::clone only increments the counter, doesn't deep clone Gadget
    println!("Gadget 2 owner: {}", gadget2.owner);
    println!("Gadget 1 reference count after gadget2: {}", Rc::strong_count(&gadget1));

    {
        // Create a third Rc pointer
        let gadget3 = Rc::clone(&gadget1);
        println!("Gadget 3 owner: {}", gadget3.owner);
        println!("Gadget 1 reference count after gadget3: {}", Rc::strong_count(&gadget1));
    } // gadget3 goes out of scope here, reference count decrements

    println!("Gadget 1 reference count after gadget3 dropped: {}", Rc::strong_count(&gadget1));

    // When gadget1 and gadget2 go out of scope, the Gadget will be dropped (deallocated)
    // because its reference count reaches zero. This prevents memory leaks.
}