草庐IT

new_setting

全部标签

c++ - 是否可以到处替换全局 "operator new()"?

我想替换全局operatornew()和operatordelete()(以及它们的所有变体)以执行一些内存管理技巧。我希望我的应用程序中的所有代码都使用自定义运算符(包括我自己的DLL和第三方DLL中的代码)。我读过的内容表明链接器将选择它在链接时看到的第一个定义(例如,如果首先链接包含自定义operatornew()的库,它将“击败”与CRT链接)。有什么方法可以保证这会发生吗?这样做的规则是什么,因为这确实是一个多重定义的符号(例如,void*operatornew(size_tsize)在全局命名空间中有两个定义)?那些可能与CRT静态链接的第三方DLL呢?即使它们与CRT动态

c++ - new 或 new[] 运算符

考虑以下代码:typedefSomeTypetype_t[2];SomeType*arr1=newtype_t;//newornew[]???type_t*arr2=newtype_t[3];//newornew[]???根据标准,第一种和第二种情况(new或new[])将调用哪个版本的new以及如何删除arr1和arr2(使用delete或delete[])? 最佳答案 第一种情况分配一个一维数组,第二种情况分配一个二维数组。它们都必须通过delete[]释放,否则你会得到未定义的行为。

c++ - 为什么 new int (*)[3] 是错误的?

typedefint(*A)[3];int(**p)[3]=newA;//OKint(**q)[3]=new(int(*)[3]);//OKint(**r)[3]=newint(*)[3];//error来自GCC的错误是error:expectedprimary-expressionbefore')'token。为什么这个表达式中需要额外的括号? 最佳答案 标准将new-type-id定义为最长的new-declarators序列。还有一个注释,它说明了类似的情况(尽管它分配了指向函数的指针):5.3.4New[expr.new]

c++ - 迭代 std::set 如何返回排序结果

容器std::set(或std::map)是STL提供的一种数据结构。在几乎所有的编译器中,它都被实现为一个R&B树,保证了log(n)的插入、查找和删除时间。https://en.wikipedia.org/wiki/Red%E2%80%93black_tree在红黑树中,元素根据存储元素的“less”运算符进行排序。所以基本上如果一个根是N+1,N将在左子树上,而N+2将在右子树上,这个顺序将由less运算符决定。我的问题是在执行以下代码时:set::iteratorit;for(it=myset.begin();it!=myset.end();it++){cout元素按排序顺序返

c++ - 如何将 C++ unordered_set 用于自定义类?

如何在unordered_set中存储类的对象?我的程序需要经常检查此unordered_set中是否存在某个对象,如果存在,则对该对象进行一些更新。我在网上查过如何使用unordered_set,但遗憾的是大多数教程都是关于在int或string类型上使用它的。但是我怎样才能在类里面使用它呢?我如何定义一个散列函数来使以下示例中的node_id成为unordered_set的键?#include#includeusingnamespacestd;//HowcanIdefineahashfunctionthatmakes'node'use'node_id'askey?structnod

c++ - 'malloc' 和 'new' 是如何工作的?它们有何不同(实现方面)?

这个问题在这里已经有了答案:Whatisthedifferencebetweennew/deleteandmalloc/free?(15个答案)关闭去年。我知道它们在语法上有何不同,C++使用new,而C使用malloc。但是,在高层次的解释中,它们是如何工作的?参见Whatisthedifferencebetweennew/deleteandmalloc/free?

c++ - Visual Studio 2015 : Can't create a new empty project c++

我最近获得了新版本的VisualStudio,但我似乎找不到如何为C++创建一个空项目。选项似乎只有C#和Basic。 最佳答案 VisualStudio2015的默认(典型)安装不再包含C++编译器和工具。这是社区中一个非常受欢迎的问题,因为许多开发人员不希望C++带来足迹。如果您尝试卸载VisualStudio2015,安装程序屏幕会弹出,您会看到一个名为“修改”的按钮。这将更改您当前的安装。执行自定义安装并选择您需要的C++功能/库。据我所知,大多数版本都支持C++,包括ExpressforWindows、Expressfor

集合框架:Set集合的特点、HashSet集合的底层原理、哈希表、实现去重复

Set集合的特点Set(集合)是一种无序的、不重复的数据结构,它的特点如下:1.集合中的元素是无序的:Set中的元素没有顺序,无法通过索引来访问。2.集合中的元素是唯一的:Set中不允许有重复的元素,每个元素在集合中只能出现一次。3.内部实现采用哈希表或树形结构:Set内部通常是基于哈希表或平衡树等数据结构实现的。4.可以用于去重和快速查找:因为Set中的元素是唯一的,所以可以很方便地用来做去重操作。同时,由于内部实现采用哈希表或树形结构,所以查找某个元素的时间复杂度为O(1)或O(logn)。5.Set中的元素必须是可哈希的:由于Set中的元素是基于哈希表实现的,所以集合中的元素必须是可哈希

c++ - new int[25,2] 是什么意思?

下面代码中第二个参数加逗号是什么意思?int*num=newint[25,2]; 最佳答案 那是commaoperator在行动:它评估它的操作数并返回最后一个,在你的情况下2。所以这等同于:int*num=newint[2];可以肯定地说25,2部分不是预期的,除非它是一个技巧问题。编辑:谢谢DidierTrosset。 关于c++-newint[25,2]是什么意思?,我们在StackOverflow上找到一个类似的问题: https://stackove

c++ - 使用类特定的 set_new_handler

对于类特定的new_handler实现,我在“effectivec++”一书中遇到了以下示例。这在多线程环境中看起来有问题,我的问题是如何在多线程环境中实现类特定的new_handler?void*X::operatornew(size_tsize){new_handlerglobalHandler=//installX'sstd::set_new_handler(currentHandler);//handlervoid*memory;try{//attemptmemory=::operatornew(size);//allocation}catch(std::bad_alloc&)