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

Rust · Intermediate · question 28 of 100

What is the purpose of the PhantomData marker type, and when might you use it?

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

In Rust programming language, ‘PhantomData‘ is a marker type that indicates that a type parameter is used only for controlling lifetime or ownership relationships between other types. This type does not contribute to the size of the struct it is contained in.

Here’s an example to make it more clear:

    use std::marker::PhantomData;
    
    struct Example<'a, T> {
        reference: &'a T,
        phantom: PhantomData<&'a T>,
    }

In this code, ‘PhantomData‘ is used to ensure that the lifetime of ‘T‘ is the same as the lifetime of ‘&’a T‘ reference. That way, the borrow checker will enforce that the reference to ‘T‘ stays valid for as long as the struct ‘Example‘ exists, but without contributing to the size of the struct.

Another use case for ‘PhantomData‘ is when creating safe abstractions over raw pointers. For example:

    use std::marker::PhantomData;
    use std::ptr::NonNull;
    
    struct MyStruct<T> {
        ptr: NonNull<T>,
        _marker: PhantomData<T>,
    }
    
    impl<T> MyStruct<T> {
        pub fn new(ptr: NonNull<T>) -> MyStruct<T> {
            MyStruct {
                ptr,
                _marker: PhantomData,
            }
        }
    }

Here, ‘PhantomData‘ is used as a marker to keep track of the type ‘T‘ that the raw pointer points to. This ensures that the lifetime of the pointed-to value is properly tracked by the Rust compiler, while still allowing for creating safe abstractions over raw pointers.

In summary, ‘PhantomData‘ is a marker type used when the type system is unable to express and enforce certain relationships between types, such as lifetime and ownership relationships. It is used to make sure that the Rust compiler tracks and enforces these relationships correctly, without contributing to the size of the struct or the value.

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