C++ Logo

std-proposals

Advanced search

Re: scope guard

From: Baruch Burstein <bmburstein_at_[hidden]>
Date: Wed, 4 Aug 2021 16:53:23 +0300
It is still cumbersome to use (need to pass a useless parameter and the
function signature needs to accept said useless parameter) and you are
still paying a price in memory footprint to hold this nothing parameter.
Though I will agree that that last is probably insignificant, especially on
the stack (the only place where I think a scope guard would be of any use),
it is still against c++ you don't pay for what you don't use philosophy.

On Wed, Aug 4, 2021 at 4:47 PM Arthur O'Dwyer via Std-Proposals <
std-proposals_at_[hidden]> wrote:

> On Wed, Aug 4, 2021, 9:31 AM Jens Maurer via Std-Proposals <
> std-proposals_at_[hidden]> wrote:
>
>>
>> In the interest of clarity, the shortest generic scope guard using
>> std::unique_ptr that I've come up with so far is:
>>
>>
>> template<class X>
>> using scope_guard = std::unique_ptr<void, X>;
>>
>> void f()
>> {
>> scope_guard guard(0, [](void*) { std::cout << "hi"; });
>> }
>>
>
> This is pretty neat, actually! But are you sure that unique_ptr calls its
> deleter when it holds nullptr? I think you need to replace `0` with
> `&guard`, or maybe replace `unique_ptr` with `shared_ptr`, in order to make
> this behave correctly.
>
> You could save one more character by changing `void*` to `auto`.
>
> Arthur
> --
> Std-Proposals mailing list
> Std-Proposals_at_[hidden]
> https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals
>

Received on 2021-08-04 08:54:02