WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Rust · Advanced · question 47 of 100

How do you implement a custom smart pointer in Rust? Provide an example.?

📕 Buy this interview preparation book: 100 Rust questions & answers — PDF + EPUB for $5

In Rust, a smart pointer is a data structure that acts like a pointer but also provides additional functionality, such as memory management, reference counting, and resource sharing. Rust provides two built-in smart pointers, ‘Box‘ and ‘Rc‘. However, you can also implement your own custom smart pointer.

To implement a custom smart pointer in Rust, you need to define a struct that holds the pointer data and implement the ‘Deref‘ and ‘Drop‘ traits.

Here’s an example of a custom smart pointer that holds a reference-counted string and prints its value whenever it’s dropped:

    use std::ops::Deref;
    
    struct MySmartPointer {
        data: Rc<String>,
    }
    
    impl MySmartPointer {
        fn new(value: &str) -> MySmartPointer {
            MySmartPointer { data: Rc::new(String::from(value)) }
        }
    }
    
    impl Deref for MySmartPointer {
        type Target = String;
        
        fn deref(&self) -> &String {
            &self.data
        }
    }
    
    impl Drop for MySmartPointer {
        fn drop(&mut self) {
            println!("Dropping MySmartPointer with data '{}'", self.data);
        }
    }
    
    fn main() {
        let my_pointer = MySmartPointer::new("hello world");
        println!("Pointer value: {}", *my_pointer);
    }

In this example, we define a ‘MySmartPointer‘ struct that holds a reference-counted ‘String‘. We implement the ‘Deref‘ trait to allow the smart pointer to be dereferenced like a regular pointer, and the ‘Drop‘ trait to print a message whenever the pointer is dropped.

When we create a ‘MySmartPointer‘ instance and print its value, we get the string ‘"hello world"`. When the program finishes, the ‘MySmartPointer‘ instance is dropped and the message ‘"Dropping MySmartPointer with data ’hello world’"` is printed.

By implementing a custom smart pointer, you can add additional functionality to your code and better manage resources.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Rust interview — then scores it.
📞 Practice Rust — free 15 min
📕 Buy this interview preparation book: 100 Rust questions & answers — PDF + EPUB for $5

All 100 Rust questions · All topics