是否可以便携地执行以下操作:
struct structure {
structure() {}
private:
// only allow container copy construct
structure(const structure&) {}
// in general, does not work because allocator (not vector) calls copy construct
friend class std::vector<structure>;
};
尝试编译上面的示例消息:
In member function void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&)
[with _Tp = kernel_data<const double*>::block]:
...
/usr/include/c++/4.3/ext/new_allocator.h:108: error: within this context
Thanks
我确实有解决方法,但我很好奇这怎么可能
No. vector
(更准确地说,分配器传递给vector
) 可以将构造任务委托给自由函数或另一个类,从而使得friend
船没用。
即使您传递自己的分配器,它也可能会反弹到实现内部的类。然后构造函数为your可以从该类访问该类,而不是您的分配器。因此,如果这是您的解决方法,则不能保证。 (尽管查看 GCC 的实现,它确实谨慎地使用无反弹分配器来构造此类子对象。)
在 GCC 的 libstdc++ 中,没有 STL 容器模板在标准类或函数的范围内构造所包含的对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)