How do I prevent a class from being allocated via the 'new' operator? (I'd like to ensure my RAII class is always allocated on the stack.)

后端 未结 4 1963
孤街浪徒
孤街浪徒 2020-11-28 07:26

I\'d like to ensure my RAII class is always allocated on the stack.

How do I prevent a class from being allocated via the \'new\' operator?

4条回答
  •  误落风尘
    2020-11-28 08:04

    I'm not convinced of your motivation.

    There are good reasons to create RAII classes on the free store.

    For example, I have an RAII lock class. I have a path through the code where the lock is only necessary if certain conditions hold (it's a video player, and I only need to hold the lock during my render loop if I've got a video loaded and playing; if nothing's loaded, I don't need it). The ability to create locks on the free store (with an unique_ptr) is therefore very useful; it allows me to use the same code path regardless of whether I have to take out the lock.

    i.e. something like this:

    unique_ptr l;
    if(needs_lock)
    {
        l.reset(new lock(mtx));
    }
    render();
    

    If I could only create locks on the stack, I couldn't do that....

提交回复
热议问题