草庐IT

delete_keys

全部标签

c++ - 什么是内存更昂贵。 "creating and deleting objects"还是 "reusing a object"?

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。我有一个对象,每10秒在整个游戏过程中需要一个对象。我应该继续删除对象还是继续使用同一个对象?对象在所谓的“空闲时间”中位于何处?因为是手游,内存是个问题。所以,只是想知道哪种方法会富有成效。"creatinganddeletingobjects"?或"reusingaobject"?谢谢

c++ - 我可以在基元上调用 delete 吗?

我有一个模板化类myFoo,它存储类型T的“内容”,它可以是基本类型或指向复杂类型的指针。当myFoo被删除时,我想释放与它恰好存储的所有内容相关的所有内存。这意味着我需要在存储的每个指针上调用delete,但我最终也可能会在原语上调用delete。这样安全吗??我在下面包含了myFoo的草图,以更好地突出显示正在发生的事情。我不确定析构函数的行为是否定义明确。templateclassmyFoo{public:myFoo(intsize){size_=size;T*foo=newT[size_];}voidaddFoo(Ttmp,intindex){foo[index]=tmp;}v

c++ - 将 operator new 和 operator delete 与自定义内存池/分配器一起使用

我正在研究一个内存池/内存分配器实现,我正在一个庄园中设置它,只有一个特殊的“客户端”对象类型可以从池中提取。客户端可以直接构建到池中,或者它可以使用池进行动态内存调用,或者理论上它可以同时进行。我希望能够以调用我的池“alloc()”和“free()”函数的方式重载operatornew和operatordelete,以便获取构建对象所需的内存。我遇到的主要问题之一是让我的运算符(operator)删除以便能够通过调用我编写的pool->free()函数来释放内存。我想出了一个hack,通过将池传递到构造函数并让析构函数执行释放工作来修复它。这一切都很好而且花花公子,直到有人需要从这

PostgreSQL提取键来自JSONB,异常“无法在标量上调用JSONB_OBJECT_KEYS”

我正在尝试与Postgres的JSONB相处。这里有很多问题,我想做的就是这样的事情:SELECTtable.column->>'key_1'asaFROM"table"我尝试了->还有一些括号的组合,但是我总是在nil中得到零。所以我试图获取所有钥匙首先看看它是否识别JSONB。SELECTjsonb_object_keys(table.column)asaFROM"table"这引发了一个错误:cannotcalljsonb_object_keysonascalar因此,要检查列类型(我创建的列类型,所以我知道是JSONB,但无论如何)SELECTpg_typeof(column)a

c++ - 将 raw operator new、placement new 和 standard delete 结合起来是否合法?

伙计们!出于好奇——以下代码可能不合法,对吗?T*p=::operatornew(sizeof(T));//allocatememoryforaTnew(p)T;//constructaTintotheallocatedmemorydeletep;//deletetheobjectusingthestandarddeleteoperator 最佳答案 没有。您只能删除从新返回的内容-没有异常(exception)。 关于c++-将rawoperatornew、placementnew和s

c++ - 防止继承 operator new 和 delete

(我确实扫描了,但找不到任何类似的东西,如果有欺骗请关闭)。有没有办法防止这两个运算符被继承?例如:structfoo{staticvoid*operatornew(std::size_t){//special}staticvoidoperatordelete(void*p,std::size_t){//special}};structbar:publicfoo{};现在bar将继承这两个运算符-在这种微不足道的情况下,没什么大不了的,如果foo和bar中有数据成员,就会出现问题(在我的情况下更糟,因为foo的分配需要与bar不同!)现在避免这种情况的方法是在bar,我也会实现操作符。

c++ - 在 hashmap/unordered_map 中,当 value 已经包含 key 时,是否可以避免数据重复

给定以下代码:structItem{std::stringname;intsomeInt;stringsomeString;Item(conststd::string&aName):name(aName){}};std::unordered_mapitems;Item*item=newItem("testitem");items.insert(make_pair(item.name,item);项目名称将在内存中存储两次-一次作为项目结构的一部分,一次作为map条目的键。是否可以避免重复?对于大约100M的记录,这种开销变得巨大。注意:我需要在Item结构中包含名称,因为我使用hash

2023版idea ssh 远程linux docker 报错: Only key-pair ssh auth type is supported for docker connections.

2023版ideassh远程linuxdocker报错:Cannotconnect:java.lang.llegalArgumentException:Onlykey-pairsshauthtypeissupportedfordockerconnections.环境:idea2023.3.2centos7安装docker报错截图:正确操作步骤:idea选择连接方式ssh点“+”号依次填入信息,点击“testConnection”,初次会报错,参考第4步报错,可以忽略,点击“OK”依次点击“Apply”,点击“OK”,关闭此界面下面的弹窗也“OK”关闭双击此处“Docker”,即可连接成功,再次

c++ - 重载运算符 delete 可以有默认参数吗?

我正在尝试重载运算符new和delete,并注意到MSVC和GCC在operatordelete的实现上似乎有所不同。考虑以下代码:#includestructCL{//Thebooldoesnothing,otherthanmakingtheseplacementoverloads.void*operatornew(size_ts,boolb=true);voidoperatordelete(void*o,boolb=true);};//Functionsaresimplewrappersforthenormaloperators.void*CL::operatornew(size_

c++ - 在 C++ 中手动模拟 delete 运算符的效果是否正式非法?

我意识到这是不明智的,我不打算这样做,但我很好奇以下行为是否实际上在形式上是非法的:#includestructX{~X(){std::cout~X();::operatordelete(x);return0;}我的理解是deletex;相当于调用析构函数然后调用::operatordelete(x);,但是我这样做合法吗那手动按标准?我知道这对使用placementnew是有效的,但是在非placement情况下呢?我的预感是它可能是非法的,因为必须为每个new执行delete(而不是operatordelete),但我会有兴趣确定。 最佳答案