草庐IT

scoped_allocator_adapter

全部标签

c++ - malloc 和 allocate 有什么区别

我遇到了一些代码,它广泛使用了allocate。例如,char*recordDate=allocate(20)我以前从未使用过allocate,因此问题来了,malloc和allocate之间有什么区别?虽然我不清楚它的优势,但我可以说的一个区别是,malloc提供原始内存,而allocate似乎会提供原始内存,但我不必将指针强制转换为特定类型。 最佳答案 来自allocate文档:Allocatesn*sizeof(T)bytesofuninitializedstoragebycalling::operatornew(std::s

c++ std::bad_alloc on std::filesystem::path 追加

我遇到了一个非常奇怪的行为,我将其提炼为一个非常基本的测试:#include#includeintmain(void){conststd::stringname="foo";conststd::filesystem::pathlock_dir="/tmp";std::filesystem::pathlockfile=lock_dir/name;return0;}我用g++-std=c++17-Wall-Wextra-Werror-gfoo.cpp-ofoo编译它。当我运行它时,我在附加两条路径的行上得到一个std::bad_alloc异常。这是我用gdb看到的#0__GI_raise(

c++ - 错误 : uint64_t was not declared in this scope when compiling C++ program

我正在尝试一个简单的程序来打印steady_clock的时间戳值,如下所示:#include#includeusingnamespacestd;intmain(){cout(steady_clock::now().time_since_epoch()).count();cout但是每当我像这样编译时g++-oabcabc.cpp,我总是会遇到错误:Infileincludedfrom/usr/include/c++/4.6/chrono:35:0,fromabc.cpp:2:/usr/include/c++/4.6/bits/c++0x_warning.h:32:2:error:#er

c++ - 非本地 lambda 和捕获变量 - "block scope"是什么意思

我目前正在玩c++11lambda,发现了一个我无法理解的例子。根据标准:Alambda-expressionwhosesmallestenclosingscopeisablockscope(3.3.3)isalocallambdaexpression;anyotherlambda-expressionshallnothaveacapture-listinitslambda-introducer所以,我创建了一个简单的例子:inta=10;autox=[a]{return1;};intmain(){intk=5;autop=[k]{returnk;};return0;}ideone中的

c++ - 如何在 C 语言的 gdb 中调试 St9bad_alloc 失败?

我有一个程序失败了:terminatecalledafterthrowinganinstanceof'std::bad_alloc'what():St9bad_alloc我想这与malloc/free有关,但我不知道是哪一个。我可以在gdb中设置什么断点来中断错误,以便我可以查看堆栈跟踪?该程序是C和C++的组合,使用gcc3.4.2编译。 最佳答案 导致异常的并不是真正的malloc/free,它是“新的”,它肯定在您的应用程序的C++部分中。看起来您提供的参数对于"new"分配来说太大了。'std::bad_alloc'是由以下

c++ - BOOST_FUSION_ADAPT_STRUCT 的限制

我尝试使用BOOST_FUSION_ADAPT_STRUCT宏并尝试了一些简单的操作,例如使用Fusion打印任意结构。从此examplecodegiveninthedocumentation开始,我无法在我的改编结构上执行融合序列允许的一些操作。#include#include#include#include#includenamespacefuz=boost::fusion;namespacedemo{structemployee{std::stringname;intage;};}//demo::employeeisnowaFusionsequenceBOOST_FUSION_A

c++ - std::allocator 构造/销毁与放置 new/p->~T()

对于我的一个项目,我正在从头开始编写一些STL容器(我有我的理由)。由于我非常接近地模仿STL的功能和接口(interface),所以我会尽最大努力遵守“如果它与标准结构同名,它将尽可能符合标准”的政策。所以,当然我的容器将分配器作为模板参数,这非常好,因为它允许一些自定义分配方案。关于我的问题。std::allocator接口(interface)将内存分配与对象构造分开。同样,它将释放与销毁分开。这是有道理的,因为从哪里获取内存与在C++中正确构造对象或多或少无关。所以有两个构造/释放函数,默认实现如下所示(直接从书中摘录):voidconstruct(pointerp,const

c++ - 为什么 std::allocator::construct 和 std::allocator::destroy 在元素类型上模板化?

std::allocator的construct和destroy成员函数根据要构造的元素的类型进行参数化:templateclassallocator{public:typedefTvalue_type;typedefT*pointer;templatevoidconstruct(U*p,Args&&...args);templatevoiddestroy(U*p);...};这样做的理由是什么?他们为什么不选择value_type*或pointer?好像allocator应该只知道如何构造或销毁T类型的对象. 最佳答案 这与all

C++:为什么这个简单的 Scope Guard 有效?

到目前为止,每个看过的作用域守卫都有一个守卫bool变量。例如,请参阅此讨论:Thesimplestandneatestc++11ScopeGuard但是一个简单的守卫可以工作(gcc4.9,clang3.6.0):templatestructfinally_t:publicC{finally_t(C&&c):C(c){}~finally_t(){(*this)();}};templatestaticfinally_tfinally_create(C&&c){returnstd::forward(c);}#defineFINCAT_(a,b)a##b#defineFINCAT(a,b)

c++ - 为什么 allocate_shared 和 make_shared 这么慢

我刚刚编写了一个测试程序来找到分配和释放许多由shared_ptr管理的对象的最快方法。我尝试了shared_ptr和new,shared_ptr和pool,make_shared,allocate_shared。让我惊讶的是allocate_shared比shared_ptr和pool慢。我使用发布版本测试vs2017+win10中的代码。发布build设置为默认(/O2)。我还在gcc4.8.5+centos6.2中使用g++-std=c++11-O3对其进行了测试。代码是:#include#include#include#include#include#includeusingn