草庐IT

example-new

全部标签

c++ - 在混合 C/C++ 程序中协调 malloc 和 new 的 "correct"方法是什么?

我有一个混合的C/C++程序。它包含一个针对C的flex/bison解析器,而其余部分是C++。作为C,生成的解析器和扫描器使用malloc、realloc和free管理它们的内存。它们足以暴露钩子(Hook),允许我提交我自己的这些函数的实现。如您所料,(C++)程序的其余部分“想要”使用new、delete等。做一些研究似乎表明相关标准并不能保证这种混合应该有效。特别是C“堆”不一定是C++“空闲区域”。看来这两个方案可以互相践踏。除此之外,有一天(很快)这个程序可能会想要集成一个自定义的堆实现,例如tcmalloc,C和C++都使用。什么是“正确”的做法?考虑到集成tcmallo

c++ - 在混合 C/C++ 程序中协调 malloc 和 new 的 "correct"方法是什么?

我有一个混合的C/C++程序。它包含一个针对C的flex/bison解析器,而其余部分是C++。作为C,生成的解析器和扫描器使用malloc、realloc和free管理它们的内存。它们足以暴露钩子(Hook),允许我提交我自己的这些函数的实现。如您所料,(C++)程序的其余部分“想要”使用new、delete等。做一些研究似乎表明相关标准并不能保证这种混合应该有效。特别是C“堆”不一定是C++“空闲区域”。看来这两个方案可以互相践踏。除此之外,有一天(很快)这个程序可能会想要集成一个自定义的堆实现,例如tcmalloc,C和C++都使用。什么是“正确”的做法?考虑到集成tcmallo

c++ - 为什么要明确调用 operator new

我看到了这样的代码:void*NewElts=operatornew(NewCapacityInBytes);并且匹配调用显式operatordelete在后面使用。为什么这样做而不是:void*NewElts=newchar[NewCapacityInBytes];为什么要显式调用operatornew和operatordelete?? 最佳答案 显式调用operatornew就像调用全局“原始”运算符new。全局operatornew返回一个原始内存块,而不调用对象的构造函数或任何用户定义的new重载。所以基本上,全局opera

c++ - 为什么要明确调用 operator new

我看到了这样的代码:void*NewElts=operatornew(NewCapacityInBytes);并且匹配调用显式operatordelete在后面使用。为什么这样做而不是:void*NewElts=newchar[NewCapacityInBytes];为什么要显式调用operatornew和operatordelete?? 最佳答案 显式调用operatornew就像调用全局“原始”运算符new。全局operatornew返回一个原始内存块,而不调用对象的构造函数或任何用户定义的new重载。所以基本上,全局opera

c++ - int *array = new int[n];这个函数实际上在做什么?

我对如何创建动态定义的数组感到困惑:int*array=newint[n];我不知道这是在做什么。我可以说它正在创建一个名为数组的指针,它指向一个新的对象/数组int?有人愿意解释一下吗? 最佳答案 new分配存储您请求的对象/数组所需的内存量。在这种情况下,n个整数。然后指针会将地址存储到这block内存。但是要小心,这个分配的内存块在你写出来之前不会被释放delete[]array; 关于c++-int*array=newint[n];这个函数实际上在做什么?,我们在StackOve

c++ - int *array = new int[n];这个函数实际上在做什么?

我对如何创建动态定义的数组感到困惑:int*array=newint[n];我不知道这是在做什么。我可以说它正在创建一个名为数组的指针,它指向一个新的对象/数组int?有人愿意解释一下吗? 最佳答案 new分配存储您请求的对象/数组所需的内存量。在这种情况下,n个整数。然后指针会将地址存储到这block内存。但是要小心,这个分配的内存块在你写出来之前不会被释放delete[]array; 关于c++-int*array=newint[n];这个函数实际上在做什么?,我们在StackOve

c++ - Qt: "new without delete"是否会导致控件的内存泄漏?

我正在查看Qt示例here:在构造函数内部,它们有:Window::Window(){editor=newQTextEdit();//Memoryleak?QPushButton*sendButton=newQPushButton(tr("&Sendmessage"));//Memoryleak?connect(sendButton,SIGNAL(clicked()),this,SLOT(sendMessage()));QHBoxLayout*buttonLayout=newQHBoxLayout();//Memoryleak?buttonLayout->addStretch();bu

c++ - Qt: "new without delete"是否会导致控件的内存泄漏?

我正在查看Qt示例here:在构造函数内部,它们有:Window::Window(){editor=newQTextEdit();//Memoryleak?QPushButton*sendButton=newQPushButton(tr("&Sendmessage"));//Memoryleak?connect(sendButton,SIGNAL(clicked()),this,SLOT(sendMessage()));QHBoxLayout*buttonLayout=newQHBoxLayout();//Memoryleak?buttonLayout->addStretch();bu

c++ - 可以使用placement-new 和vector::data() 替换 vector 中的元素吗?

关于替换不可赋值的vector元素存在两个问题:C++UseUnassignableObjectsinVectorHowtopush_backwithoutoperator=()forconstmembers?一个对象不可赋值的一个典型原因是它的类定义包含const成员,因此它的operator=被删除了。std::vector要求其元素类型是可分配的。事实上,至少使用GCC,既不是直接赋值(vec[i]=x;),也不是erase()和insert()当对象不可分配时替换元素有效。可以像下面这样使用vector::data()、直接元素销毁和使用复制构造函数放置new的函数来替换元素而

c++ - 可以使用placement-new 和vector::data() 替换 vector 中的元素吗?

关于替换不可赋值的vector元素存在两个问题:C++UseUnassignableObjectsinVectorHowtopush_backwithoutoperator=()forconstmembers?一个对象不可赋值的一个典型原因是它的类定义包含const成员,因此它的operator=被删除了。std::vector要求其元素类型是可分配的。事实上,至少使用GCC,既不是直接赋值(vec[i]=x;),也不是erase()和insert()当对象不可分配时替换元素有效。可以像下面这样使用vector::data()、直接元素销毁和使用复制构造函数放置new的函数来替换元素而