This discussion: http://forum.dlang.org/thread/bqtcdpsopxmnfbjyr...@forum.dlang.org -- led me wondering if it would be possible to create some crippled version of a class proxy that is based on RefCounted and came up with something like this:

struct Box(T) if (is(T == class)) {
    @disable this();

    this(Args...)(Args args) {
        _payload._refCounted.initialize(new T(args));
    }

    private {
        struct _Box(T) {
            private T _instance;

            ~this() {
                destroy(_instance);
            }
        }
        RefCounted!(_Box!T) _payload;
    }

    ~this() {
    }

    auto opDispatch(string name, Args...)(Args args) {
        return mixin("_payload._instance.%s(args)".format(name));
    }
}

which lets you create Box!SomeClass(args) and it will be refcounted unless you escape references and do other weird stuff.

It actually sort of seems to work at first glance, at least it seems like it does... But with my D experience being fairly limited I wonder what the potential pitfalls would be?

Full source code with example and stdout:
https://gist.github.com/aldanor/d5fb5e45ddf3dd2cb642

Reply via email to