草庐IT

scoped_allocator_adapter

全部标签

c++ - 如果自定义分配器中不存在重新绑定(bind),std::allocator_traits 是否定义 rebind_alloc?

我正在尝试重新绑定(bind)我的自定义分配器类型,MyAllocator,用于basic_string类,例如:std::basic_string,MyAllocator>...分配器作为MyAllocator传递给上下文,所以我需要重新绑定(bind)分配器。来自std::allocator_traits的cppreference页面,http://en.cppreference.com/w/cpp/memory/allocator_traits:Memberaliastemplates:rebind_alloc:Alloc::rebind::otherifpresent,othe

c++ - 如何追踪 "tcmalloc : large alloc .... "

我的应用打印几行,如:tcmalloc:largealloc4294488064bytes==0x2b968d8000@0x7274320x7273020x727a580x75a07d0x574beb0x5857560x5575df0x5717db0x57108f0x58078c0x302b80610atcmalloc:largealloc4294488064bytes==0x2c97063000@0x7274320x7273020x727a580x75a07d0x574beb0x5857560x5575df0x5717db0x57108f0x58078c0x302b80610atcm

c++ - std::allocator 中的直接初始化与统一初始化

ThisquestionhasalsobeensubmittedtoUsenet,whereitismoreappropriate,butthisisalargerandmorereliableforum.std::allocator::construct被定义为转发其参数参数使用括号打包到对象构造,也就是直接初始化。如果它使用大括号,也就是统一初始化,我们可以初始化从诸如std::make_shared和容器::放置。另外,把内容放上去也是可以接受的将初始化列表放入此类函数的参数列表中,解决initializer_list下的类型推导问题转发。这个备选方案是否被考虑过并被拒绝了?现在

c++ - 使用自定义删除器 boost scoped_ptr/scoped_array

我不知道如何让scoped_ptr或scoped_array使用自定义删除器。也许还有另一种实现类似于shared_ptr允许受控删除?顺便说一句,为什么shared_ptr允许自定义删除器而scoped_ptr不允许?只是好奇。 最佳答案 Idon'tseehowtogetscoped_ptrorscoped_arraytousecustomdeleter你不能。Maybethereisanotherimplementationwhichallowscontrolleddeletionsimilartoshared_ptr?如果您

c++ - 使用 std::allocator_traits<A>

我想设计一个类模板,它采用分配器类型(如标准第17.6.3.5节中所定义)作为模板参数。我怎么看std::allocator_traits有助于填补A的任何缺失成员使用默认设置。除此之外,标准库或boost中是否有任何有助于正确使用分配器的内容?特别是:尊重类型定义,如std::allocator_traits::propagate_on_container_copy_assignment,我是否必须在每个类的特殊成员函数中检查这些东西,每个类都有一个A类型的成员??或者是否有一些包装器类型我可以用作成员来代替它来处理这些东西?如果我想通过在用户可见对象旁边存储额外数据来过度分配以减少

C++:引用 "out of scope"对象

关于引用文献,有一件事我一直不明白,我希望有人能帮助我。据我所知,引用不能为空。但是如果你有一个函数foo()返回对堆栈对象的引用会发生什么:Object&foo(){Objecto;returno;}Object&ref=foo();理论上ref将引用一个不存在的对象,因为一旦函数返回,o就会超出范围。这里发生了什么? 最佳答案 这会导致未定义的行为。不要这样做。在实现方面,实际上,引用将指向调用foo的堆栈框架所在的堆栈。在许多情况下,该内存仍然有意义,因此错误通常不会立即显现出来。因此,您应该注意永远不要创建这样的悬空引用。

c++ - "Nested"scoped_lock

我缩短的简化类如下所示:classA{public://...methodA();methodB();protected:mutableboost::mutexm_mutex;sometype*m_myVar;}A::methodA(intsomeParam){boost::mutex::scoped_lockmyLock(m_mutex);m_myVar->doSomethingElse();}A::methodB(intsomeParam){boost::mutex::scoped_lockmyLock(m_mutex);m_myVar->doSomething();this->m

c++ - 如何使用 std::scoped_allocator_adapter?

据我了解,std::scoped_allocator_adapter提供一种控制机制,用于指定单独哪个分配器将由容器、其元素、其元素的元素等使用,假设元素本身是容器。也就是说,我无法理解std::scoped_allocator_adapter的语义.BjarneStroustrup在TheC++ProgrammingLanguage,section34.4.4,pg中提供了以下4个示例。1001(在接下来的问题中,我将它们称为Example-1、Example-2等。):Wehavefouralternativesforallocationofvectorsofstrings://v

c++ - 获取 std::bad_alloc 错误;如何交叉验证操作系统是否真的内存不足

我有一个C++程序/Linux,它在运行后2-3秒内开始在32GBRAM上出现错误std::badalloc(并由包装器调用者重新启动)。我真正关心的是解决这个问题,但我想一步一步地去建立我对这个问题的理解的信心。看起来系统无法为new请求分配内存(当操作系统内存不足时会发生这种情况)。当程序运行时,我在另一个终端上以尽可能小的间隔(1秒)运行sar命令,但我看到kbcached是~24GB内存。为什么操作系统无法释放缓存并使该内存可用于new请求?要么1秒时间太多(与程序运行的速度相比),要么我在这里做错了什么。基本上我想交叉验证并确定操作系统确实内存不足,因此无法分配内存,然后从这

C++ block scope extern declaration linkage,混淆C++标准解释

标准N3242(C++11草案)和N3797(C++14draft)两者有相同的段落。§3.5Programandlinkage[basic.link]¶6Thenameofafunctiondeclaredinblockscopeandthenameofavariabledeclaredbyablockscopeexterndeclarationhavelinkage.Ifthereisavisibledeclarationofanentitywithlinkagehavingthesamenameandtype,ignoringentitiesdeclaredoutsidethei