我对一个问题有疑问,特别是关于this回答的问题 有一部分是留给读者的练习(这本身并不是问题),特别是Jonathan Wakely(答案的作者)说:
此代码声明Allocator ::指针是Allocator :: value_type *
在代码中表示为:
static_assert(std::is_same<typename AT::pointer, typename AT::value_type*>::value, "Allocator doesn't use fancy pointers");
当时,我得到了答案,这就是全部
一段时间后,当我再次阅读时,我发现自己大声问道:花式指针?
从here(allocator_traits
的文档),pointer
定义为:
Alloc ::指针(如果存在),否则为value_type *
问题就出现了:Allocator::pointer
和Allocator::value_type*
实际上有什么不同的现实案例?
答案 0 :(得分:1)
我想到的一件事是在撰写allocator
规范时可能是现实的。
很久以前,Intel Segmented Memory Model中有不同类型的指针:near, far, and huge,显示速度/大小权衡。
如今,凭借当前的虚拟内存架构,它们不再具有任何实际用途。但是,在旧设置中,概念上分配器可以typedef
:
typdef T *huge pointer;
它将提供的信息不仅仅是T *
。
答案 1 :(得分:1)
分配器的要求在[allocator.requirements]中列出。对于类型Ext.define('MyApp.view.MyController', {
extend: 'Ext.app.ViewController',
requires: 'MyApp.view.MyWindow',
openWindow: function(){
var win = Ext.widget('addclient');
win.mycallback = this.onAddClientCallback.bind(this);
win.show();
},
onAddClientCallback: function(data){
console.log("data from window", data);
}
});
的分配器类X
,我看到的相关要求是:
T
可转换为X::pointer
X::const_pointer
的类型为*p
,其中T&
的类型为p
X::pointer
的类型为*q
,其中T const&
的类型为q
X::const_pointer
的类型为p->m
(条件为T::m
明确定义)(*p).m
的类型为q->m
(条件为T::m
明确定义) (*q).m
pointer
满足所有这些要求。在这种情况下,shared_ptr<T>
绝对不会与pointer
(value_type*
)相同。
答案 2 :(得分:1)
想象一个分配器,它会创建类似指针的对象,如智能指针或类似的东西,即带指针和引用计数器的结构。只要符合它的目的,“非标准”指针结构就可以在大多数STL模板中使用,也可以作为专用分配器返回的类型。
作为一个现实的例子,您可以想象一个创建std::shared_ptr
类型对象的分配器。正确的typedef看起来像typedef std::shared_ptr<T> pointer;
,与T*
大不相同。