Similar to how we only define inherited when we need it, we should only define initialize and allocate where needed.
It would also be nice to do this for reset_memo_wise and preset_memo_wise as well—we don't always need them on both the class and instance level.