主要是构造函数这玩意太灵活了,你新追加的对象很难有个高效的统一的调用方式(既有对象可以move过去)。
例如说你realloc了5个类T新实例,这5个新实例是不是都调用同样的参数调用同样的构造函数呢?
如果是,那在接口设计和实现时大概就是诸如:
template <typename T, typename ... Args> T* cpp_realloc(int n, Args&& ... args) { //realloc for (int i = 0; i < n; i++) { new(&obj[i]) T(std::forward<Args>(args) ...); } }
看着很简单,但问题是:T的构造中是否有涉及参数的移动语义。
一但有,要么忍受“5个对象由相同参数传入,但实质结果不同(只有第一个对象能获得真实参数)”,要么就要设计一个复杂的语法或大量的临时对象的构造来完成这样的工作——到这时,你就需要考虑,到底这么干,到底是不是真的能提高性能或者降低调用者的使用复杂度了。
如果不是,那就更麻烦,这就意味着你还要提供一些回调机制来让使用者来决定实际调用的构造函数及参数。
所以,如果小项目里,明确没有类似场景,可以自己弄一个玩玩。
但是如果推广为通用的面向所有场景的,那这个想法基本上不现实。