草庐IT

new_size

全部标签

c++ - C++ 中的 vector <int>::size_type

这个C++语句是什么意思?vector::size_typex;而且,这里的作用域运算符::有什么用?换句话说,我们如何阅读这个英文陈述?例如,对于X::x(){...},我们说x()是一个成员函数classX. 最佳答案 size_type是类型为vector的(静态)成员类型.通常是typedef对于std::size_t,它本身通常是typedef对于unsignedint或unsignedlonglong. 关于c++-C++中的vector::size_type,我们在Stac

c++ - 是否可以防止对象的堆栈分配并只允许使用 'new' 对其进行实例化?

是否可以阻止对象的堆栈分配,只允许在堆上使用“new”启动它? 最佳答案 您可以这样做的一种方法是将构造函数设为私有(private),并且只允许通过返回指针的静态方法进行构造。例如:classFoo{public:~Foo();staticFoo*createFoo(){returnnewFoo();}private:Foo();Foo(constFoo&);Foo&operator=(constFoo&);}; 关于c++-是否可以防止对象的堆栈分配并只允许使用'new'对其进行实例

C++,是否可以直接调用构造函数,而不需要new?

如果我已经有对象的内存,我可以不使用new显式调用构造函数吗?classObject1{char*str;public:Object1(char*str1){str=strdup(str1);puts("ctor");puts(str);}~Object1(){puts("dtor");puts(str);free(str);}};Object1ooo[2]={Object1("I'mthefirstobject"),Object1("I'mthe2nd")};do_smth_useful(ooo);ooo[0].~Object1();//calldestructorooo[0].Ob

c++ - make_shared 真的比 new 更高效吗?

我正在用C++11中的shared_ptr和make_shared进行试验,并编写了一个小玩具示例来查看调用make_shared时实际发生的情况>。作为基础架构,我使用llvm/clang3.0以及XCode4中的llvmstdc++库。classObject{public:Object(conststring&str){cout("make_shared");coutptr_res2(newObject("new"));cout现在请看一下输出:Createsmart_ptrusingmake_shared...Constructormake_sharedCopyconstruct

c++ - C++ 中的 "new"和 "malloc"和 "calloc"有什么区别?

这个问题在这里已经有了答案:关闭13年前.“new”和“malloc”和“calloc”和其他家族有什么区别?(何时)除了“new”之外我还需要什么吗?其中一个是使用其他实现的吗? 最佳答案 new和delete是C++特定的功能。它们在C中不存在。malloc是老式的C做事方式。大多数时候,您不需要在C++中使用它。malloc分配未初始化的内存。分配的内存必须用free释放。calloc与malloc类似,但使用常量(0)初始化分配的内存。它需要用free释放。new通过调用构造函数(如果它是一个对象)来初始化分配的内存。用ne

c++ - 如何正确替换全局new和delete运算符

首先,至少有4-5个主题与SO上的主题相似。我阅读了它们中的每一个,但我觉得它们并没有真正帮助我解决这个特定问题。如果其他人发现重复的问题,我深表歉意。在发布此之前,我已经完成了我的搜索,因为这似乎是一个非常常见的问题。我在Windows7上使用VisualStudio.NET2003。我有自己的new/delete重载,指向我自己对malloc()和free()的自定义调用以进行诊断。我的新/删除重载在一个头文件中,我已经包含在几个文件中。问题是,代码库几乎是意大利面条,没有简单的方法可以确保所有东西都使用这些重载。第三方库包含黑盒。我们也到处使用STL。在我的测试中,我发现STL仍

c++ - 对于 "-fno-exceptions", "new T"会发生什么?

我想知道,如果我使用-fno-exceptions选项编译我的程序以禁用异常处理,newT是否仍会抛出bad_alloc?或者编译器(GCC和clang支持该选项)是否会将newT的使用隐式转换为new(nothrow)T? 最佳答案 按照我的理解,operatornew是由libstdc++定义的。如果您现在使用-fno-exceptions编译自己的代码,则无法捕获任何异常,但您仍将链接到会引发异常的普通版本的libstdc++。所以是的,newT会抛出异常,即使使用-fno-exception。但是,如果您也使用-fno-ex

c++ - 为什么 size_t 是无符号的?

BjarneStroustrup在C++编程语言中写道:Theunsignedintegertypesareidealforusesthattreatstorageasabitarray.Usinganunsignedinsteadofaninttogainonemorebittorepresentpositiveintegersisalmostneveragoodidea.Attemptstoensurethatsomevaluesarepositivebydeclaringvariablesunsignedwilltypicallybedefeatedbytheimplicitco

c++ - new char 实际上是否保证了类类型的对齐内存?

通过newchar[sizeof(T)]分配一个缓冲区,保证为T类型分配正确对齐的内存,其中的所有成员T有它们自然的、实现定义的对齐方式(也就是说,您没有使用alignas关键字来修改它们的对齐方式)。我在这里的一些答案中看到了这个保证,但我并不完全清楚标准是如何达到这个保证的。标准的5.3.4-10给出了基本要求:本质上newchar[]必须与max_align_t对齐。我缺少的是表示alignof(T)将始终是最大值为max_align_t的有效对齐方式。我的意思是,这似乎很明显,但结构的对齐结果是否必须最多为max_align_t?甚至第3.11-3点说可能支持扩展对齐,所以编译

c++ - 了解 std::hardware_破坏性_interference_size 和 std::hardware_constructive_interference_size

添加了C++17std::hardware_destructive_interference_sizeandstd::hardware_constructive_interference_size.首先,我认为这只是获取L1缓存行大小的一种可移植方式,但这是过于简单化了。问题:这些常量与L1缓存行大小有何关系?是否有一个很好的例子来展示他们的用例?两者都定义为staticconstexpr。如果您构建二进制文件并在具有不同缓存行大小的其他机器上执行它,这不是问题吗?当您不确定您的代码将在哪台机器上运行时,它如何防止错误共享? 最佳答案