string keep reference to allocator. so it can destroy itself when deconstructing
implement node's data using a union style