草庐IT

malloc_ptr_t

全部标签

c++ - Malloc 和构造函数

与new和delete运算符不同,malloc在创建对象时不会调用构造函数。在这种情况下,我们必须如何创建一个对象才能调用构造函数。 最佳答案 呃...使用new?这就是重点。您也可以显式调用构造函数,但没有理由这样做正常使用new/delete:A*a=newA();deletea;显式调用构造函数/析构函数("placementnew"):A*a=(A*)malloc(sizeof(A));new(a)A();a->~A();free(a); 关于c++-Malloc和构造函数,我们

c++ - 为现有变量创建 boost::shared_ptr

我有一个现有的变量,例如inta=3;我现在如何创建boost::shared_ptr到a?例如:boost::shared_ptra_ptr=&a;//thisdoesn'twork 最佳答案 虽然您应该在创建它时将变量放入托管指针中,以便从现有指针中执行此操作。int*a=newint;boost::shared_ptra_ptr(a);那是说你绝对不想将堆栈变量放入shared_ptr会发生不好的事情如果由于某种原因一个函数需要shared_ptr而你只有一个堆栈变量,你最好这样做:inta=9;boost::shared_p

c++ - 为现有变量创建 boost::shared_ptr

我有一个现有的变量,例如inta=3;我现在如何创建boost::shared_ptr到a?例如:boost::shared_ptra_ptr=&a;//thisdoesn'twork 最佳答案 虽然您应该在创建它时将变量放入托管指针中,以便从现有指针中执行此操作。int*a=newint;boost::shared_ptra_ptr(a);那是说你绝对不想将堆栈变量放入shared_ptr会发生不好的事情如果由于某种原因一个函数需要shared_ptr而你只有一个堆栈变量,你最好这样做:inta=9;boost::shared_p

c++ - exec() 更改程序镜像后 malloc 的内存会发生什么?

我知道,当我在Linux中调用其中一个exec()系统调用时,它将用新图像替换当前正在运行的进程。因此,当我fork一个新进程并运行exec()时,子进程将被新进程替换。我从堆中分配的任何内存会发生什么变化?假设我想解析任意数量的命令并将其发送到exec()。为了保持这个任意数字,我可能不得不在某个时候分配内存,因为我认为我不能用静态大小的数组正确地做到这一点,所以我可能会使用malloc()或等价的东西。我需要在调用exec()之前一直分配此内存,但exec()永远不会返回。内存是否被操作系统回收? 最佳答案 当您调用fork()

c++ - exec() 更改程序镜像后 malloc 的内存会发生什么?

我知道,当我在Linux中调用其中一个exec()系统调用时,它将用新图像替换当前正在运行的进程。因此,当我fork一个新进程并运行exec()时,子进程将被新进程替换。我从堆中分配的任何内存会发生什么变化?假设我想解析任意数量的命令并将其发送到exec()。为了保持这个任意数字,我可能不得不在某个时候分配内存,因为我认为我不能用静态大小的数组正确地做到这一点,所以我可能会使用malloc()或等价的东西。我需要在调用exec()之前一直分配此内存,但exec()永远不会返回。内存是否被操作系统回收? 最佳答案 当您调用fork()

c++ - 为什么 unique_ptr<T>(T*) 是显式的?

以下函数无法编译:std::unique_ptrfoo(){int*answer=newint(42);returnanswer;}std::unique_ptrbar(){returnnewint(42);}我觉得这有点不方便。制作std::unique_ptr(T*)的理由是什么?明确的? 最佳答案 您不希望托管指针隐式获取原始指针的所有权,因为这可能会导致未定义的行为。考虑一个函数voidf(int*);和一个电话int*p=newint(5);f(p);deletep;.现在假设有人重构f采用托管指针(任何类型)并允许隐式转

c++ - 为什么 unique_ptr<T>(T*) 是显式的?

以下函数无法编译:std::unique_ptrfoo(){int*answer=newint(42);returnanswer;}std::unique_ptrbar(){returnnewint(42);}我觉得这有点不方便。制作std::unique_ptr(T*)的理由是什么?明确的? 最佳答案 您不希望托管指针隐式获取原始指针的所有权,因为这可能会导致未定义的行为。考虑一个函数voidf(int*);和一个电话int*p=newint(5);f(p);deletep;.现在假设有人重构f采用托管指针(任何类型)并允许隐式转

c++ - 表达式 "(ptr == 0) != (ptr == (void*)0)"真的可以吗?

我在aforumthread中阅读了此声明链接到inacommentby@jsantander:Keepinmindthatwhenyouassignorcompareapointertozero,thereissomespecialmagicthatoccursbehindthescenestousethecorrectpatternforthegivenpointer(whichmaynotactuallybezero).Thisisoneofthereasonswhythingslike#defineNULL(void*)0areevil–ifyoucompareachar*to

c++ - 表达式 "(ptr == 0) != (ptr == (void*)0)"真的可以吗?

我在aforumthread中阅读了此声明链接到inacommentby@jsantander:Keepinmindthatwhenyouassignorcompareapointertozero,thereissomespecialmagicthatoccursbehindthescenestousethecorrectpatternforthegivenpointer(whichmaynotactuallybezero).Thisisoneofthereasonswhythingslike#defineNULL(void*)0areevil–ifyoucompareachar*to

c++ - 在 C++11 中将对象的所有权从一个 unique_ptr 转移到另一个 unique_ptr?

在C++11中,我们可以使用std::move()将一个对象的所有权转移到另一个unique_ptr。所有权转移后,让出所有权的智能指针变为null,get()返回nullptr.std::unique_ptrp1(newint(42));std::unique_ptrp2=std::move(p1);//Transferownership在将所有权转移到另一个unique_ptr时,这在哪些情况下有用? 最佳答案 以下情况涉及从一个unique_ptr转移所有权另一个:从函数返回,并作为参数传递给构造函数等函数。假设你有一些多态类