如果您想要更多的灵活性,请考虑让用户指定一个Allocator.我会解释一下.
某些类,例如std :: vector,string,map等需要堆存储用于它们所代表的数据结构.它不被认为是不礼貌的;当您有一个自动分配的向量时,预计用户将知道在向量构造函数被调用时分配一个缓冲区:
voID foo() { // user of vector kNows a buffer that can hold at least 10 ints // gets allocated here. std::vector<int> foo(10); }
同样,对于std :: string,你知道有一个内部的,堆分配的char *.每个字符串实例是否有一个通常取决于STL实现;经常被引用计数.
然而,对于几乎所有的STL类,用户可以选择放置什么东西,因为它们可以指定分配器.矢量定义如下:
template <typename T,typename Alloc = DefaultAllocator<T> >class vector { // etc.};
在内部,向量使用Alloc(默认为T的默认分配器)来分配可能需要的缓冲区和其他堆存储.如果用户不喜欢默认分配策略,则可以指定自己的策略:
vector<int,MyCustomAllocator> foo(10);
现在当构造函数分配时,它将使用MyCustomAllocator而不是默认值.这里有一些details on writing your own STL allocator.
如果您担心在类中使用堆进行某些存储可能是“不好的方式”,那么您可能需要考虑向类的用户提供这样的选项,以便它们可以指定如何分配事物您的默认策略不符合他们的需求.
总结以上是内存溢出为你收集整理的C关于堆上的成员变量的礼仪全部内容,希望文章能够帮你解决C关于堆上的成员变量的礼仪所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)