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;
}
```
  • RAII Arun Chandrasekaran via Digitalmars-d-learn
    • Re: RAII ketmar via Digitalmars-d-learn
      • Re: RAII kinke via Digitalmars-d-learn
        • Re: RAII Adam D. Ruppe via Digitalmars-d-learn
      • Re: RAII Arun Chandrasekaran via Digitalmars-d-learn
        • Re: RAII ketmar via Digitalmars-d-learn
    • Re: RAII Adrian Matoga via Digitalmars-d-learn
    • Re: RAII cym13 via Digitalmars-d-learn
      • Re: RAII Arun Chandrasekaran via Digitalmars-d-learn

Reply via email to