Era Scarecrow wrote:
suggested new was the constructor & allocator, meaning you'd have to have in depth detail of both steps in order to override it later. Abstraction then is thrown away and the black box method becomes a white/clear box method, encapsulation goes out the window.
You raise a valid issue here. However, I think there's an easy solution (similar to what foobar was suggesting) which separates the allocator from the constructor but still allows for easy defaults and consistent syntax at object instantiation.
Here's my idea: class A { private void* myAlloc() { return GC.alloc(A); } this new1() { ... } // automatic allocator this new2() @alloc(myAlloc) { ... } } class B : A { override this new1() { super.new1(); ... } override this new2() { // for 'new2' we could either: // 1. Default to automatic. // That's probably bad because you don't know // when you're potentially overriding a // specialized allocator in the super class. // 2. Compiler error: Must define an allocator // with @alloc(...) for this constructor // because super.new2 override the automatic one. } // So we'd probably want to require: private void* b_alloc() { ... } override this new2 @alloc(b_alloc) { ... } }