RAII
cym13 via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Feb 23 13:05:48 PST 2017
On Thursday, 23 February 2017 at 09:52:26 UTC, Arun
Chandrasekaran wrote:
> I'm trying to write an RAII wrapper on Linux.
>
> I understand struct in D doesn't have default constructor (for
> .init reasons).
> I don't want to use `scope`.
>
> Is there an elegant way to achieve this in D?
>
> ```
> import core.sys.posix.pthread;
> import core.sys.posix.sys.types;
>
> /// Makes pthread_mutexattr_t cleanup easy when using exceptions
> struct mutexattr_wrapper
> {
> /// Constructor
> this(bool _)
> {
> if (pthread_mutexattr_init(&m_attr) != 0 ||
> pthread_mutexattr_setpshared(&m_attr,
> PTHREAD_PROCESS_SHARED)!= 0)
> // may be I will add few more methods here
> throw custom_exception("pthread_mutexattr_xxxx
> failed");
> }
>
> /// Destructor
> ~this() { pthread_mutexattr_destroy(&m_attr); }
>
> /// This allows using mutexattr_wrapper as
> pthread_mutexattr_t
> alias m_attr this;
>
> pthread_mutexattr_t m_attr;
> }
> ```
It reminds me of
https://w0rp.com/blog/post/an-raii-constructor-by-another-name-is-just-as-sweet/ which isn't what you want but may be interesting anyway.
More information about the Digitalmars-d-learn
mailing list