草庐IT

new_order

全部标签

c++ - malloc 和放置 new vs. new

过去几天我一直在研究这个问题,到目前为止,除了教条式的论点或诉诸传统(即“这是C++方式!”)之外,我还没有真正找到任何令人信服的东西。如果我正在创建一个对象数组,那么使用的令人信服的原因(除了易用性)是什么:#defineMY_ARRAY_SIZE10//...my_object*my_array=newmy_object[MY_ARRAY_SIZE];for(inti=0;i超过#defineMEMORY_ERROR-1#defineMY_ARRAY_SIZE10//...my_object*my_array=(my_object*)malloc(sizeof(my_object)

c++ - 为什么 new[] 表达式会调用析构函数?

来自C++17标准(草案here),[expr.new]:Ifthenew-expressioncreatesanobjectoranarrayofobjectsofclasstype,accessandambiguitycontrolaredonefortheallocationfunction,thedeallocationfunction,andtheconstructor.Ifthenew-expressioncreatesanarrayofobjectsofclasstype,thedestructorispotentiallyinvoked.new[]为什么会调用析构函数?

c++ - std::shared_ptr 初始化:make_shared<Foo>() vs shared_ptr<T>(new Foo)

这个问题在这里已经有了答案:Differenceinmake_sharedandnormalshared_ptrinC++(8个回答)关闭7年前。两者有什么区别:std::shared_ptrp=std::shared_ptr(newint);和std::shared_ptrp=std::make_shared();?我应该更喜欢哪一个?为什么?P。S.很确定这个问题一定已经回答过了,但我找不到类似的问题。 最佳答案 这两个例子都过于冗长了:std::shared_ptrp(newint);//or'=shared_ptr(newi

c++ - C++ 中何时需要#include <new> 库?

根据thisreference对于operatornew:Globaldynamicstorageoperatorfunctionsarespecialinthestandardlibrary:Allthreeversionsofoperatornewaredeclaredintheglobalnamespace,notinthestdnamespace.ThefirstandsecondversionsareimplicitlydeclaredineverytranslationunitofaC++program:Theheaderdoesnotneedtobeincludedfor

c++ - C++ `new` 运算符可以在现实生活中抛出异常吗?

new操作符在现实生活中能抛出异常吗?如果是这样,除了杀死我的应用程序之外,我还有其他处理此类异常的选项吗?更新:是否有任何现实世界的、新重的应用程序检查故障并在没有内存时恢复?另见:HowoftendoyoucheckforanexceptioninaC++newinstruction?Isitusefultotestthereturnof“new”inC++?WillnewreturnNULLinanycase? 最佳答案 是的,如果分配失败,new可以并且将会抛出。如果内存不足或尝试分配的内存块太大,就会发生这种情况。您可以捕

c++ - 每个 memory_order 是什么意思?

我读了一章,我不太喜欢它。我仍然不清楚每个内存顺序之间的区别是什么。这是我目前的猜测,在阅读了更简单的http://en.cppreference.com/w/cpp/atomic/memory_order后,我明白了这一点。以下是错误的所以不要试图学习它memory_order_relaxed:不同步,但在不同原子变量中从另一种模式完成订单时不会被忽略memory_order_consume:同步读取这个原子变量,但是它不同步在此之前写入的宽松变量。但是,如果线程在修改Y(并释放它)时使用varX。其他消耗Y的线程也会看到X被释放?我不知道这是否意味着这个线程推出了x(显然是y)的变

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