草庐IT

auto-delete

全部标签

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++ - 从核心转储中识别 auto_ptr 背后对象的具体类型

我有一个auto_ptr,其中IFoo是一个只有纯虚拟方法的接口(interface)。我现在在段错误后还有一个核心文件,我真的很想知道这个auto_ptr背后的具体子类是什么。作为dynamic_cast在项目中工作,我认为RTTI必须以某种方式可用,但我不知道如何通过gdb访问此信息。?我得到的输出如下:(gdb)printthis->obj._M_ptr$22=(classmartin::IFoo*)0x7418我真正想知道的是,指针是否属于IBar或IBaz.感谢您的帮助! 最佳答案 WhatI'dreallyliketok

c++ - decltype(auto) 与 auto&& 执行函数返回类型的通用处理

当使用auto&&处理返回左值的函数时:intfunc(){intv=42;returnv;}auto&&v=func();将v视为引用而不是左值会产生什么后果?这些后果是否证明使用decltype(auto)而不是auto&&来执行函数返回类型的通用处理是合理的? 最佳答案 auto&&已经是捕获函数返回值的最佳选择,因此decltype(auto)的差异只能是缺点。在您的示例中,生命周期延长应用于从函数返回的其他临时对象。这导致它的行为基本上与直接命名的对象相同,其效果是引用限定符被“删除”。将decltype(auto)与按值

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

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

C++1y/14 : auto variable templates?

下面的C++1y/C++14程序格式错误吗?templateconstexprautoX=42;intmain(){static_assert(X==42,"");}为什么/为什么不?Clangtrunk提示说:error:invalidoperandstobinaryexpression('auto'and'int') 最佳答案 这是clang中的一个错误,现在已修复:http://llvm.org/bugs/show_bug.cgi?id=19152 关于C++1y/14:autov

c++ - Visual C++ 2015 在使用 decltype(auto) 时给出 C4552 警告

我想我在VisualC++2015中遇到了一个错误,但我想确定一下。考虑这个片段:templatedecltype(auto)f(Tparam){returnparam+1;}intmain(){autoi=f(10);return0;}VisualC++2015在return语句中给出了这个警告:warningC4552:'+':operatorhasnoeffect;expectedoperatorwithside-effect尽管它似乎对生成的代码没有任何影响。这是编译器错误吗? 最佳答案 这似乎是一个错误。它在这里有一个开放

c++ - 如果使用返回引用的函数初始化 'auto' var,为什么它不声明引用类型?

当使用返回引用的函数初始化“auto”变量时,为什么var类型不是引用?例如在下面的例子中,为什么x的类型是Foo而不是Foo&?classTestClass{public:Foo&GetFoo(){returnmFoo;}private:FoomFoo;};intmain(){TestClasstestClass;autox=testClass.GetFoo();//Whytypeofxis'Foo'andnot'Foo&'?return0;}编辑:该链接解释了如何获取引用,但我的问题是这种行为的原因。 最佳答案 因为那样做会很烦

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,我也会实现操作符。