gpt4 book ai didi

C++ 友元类 std::vector

转载 作者:太空狗 更新时间:2023-10-29 21:08:29 28 4
gpt4 key购买 nike

是否可以便携地执行以下操作:

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

谢谢

我确实有解决方法,但我很好奇这怎么可能

最佳答案

没有。 vector(更准确地说,分配器传递给vector)可以将构造任务委托(delegate)给一个自由函数或另一个类,使 friend 船没用。

即使您传递自己的分配器,它也可能会反弹到实现的内部类。然后可以从那个类访问您的 类的构造函数,而不是您的分配器。因此,如果这是您的解决方法,则不能保证。 (虽然看 GCC 的实现,它确实谨慎地使用 un-rebound 分配器来构造这样的子对象。)

在 GCC 的 libstdc++ 中,没有任何 STL 容器模板在标准类或函数的范围内构造包含的对象。

关于C++ 友元类 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2907432/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com