草庐IT

delete-previous

全部标签

c++ - 如何对两个指针指向的变量使用 delete?

假设我有一个用new声明的假想指针,如下所示:int*hypothetical_pointer=newint;并创建另一个具有相同值的假设指针:int*another_hypothetical_pointer=hypothetical_pointer;如果我要删除这些用new声明的指针,我是否必须删除两个指针,或者只删除用new显式声明的指针?或者我可以删除任一指针吗? 最佳答案 delete销毁指针指向的动态分配对象。有一个或100个指针指向该对象并不重要,您只能销毁一个对象一次。deletehypothetical_pointe

c++ - 烦人的错误消息 : cannot merge previous GCDA file

问题:我正在使用以下标志生成我的Qt应用程序(.pro文件)的代码覆盖率:QMAKE_CXXFLAGS+=--coverageQMAKE_LFLAGS+=--coverage代码覆盖率已正确生成,问题是如果我只想运行一个测试函数/类(并且已经创建了GCDA文件),我会收到以下错误消息:profiling:/Users/user/.../build-myapp/myclass.gcda:cannotmergepreviousGCDAfile:corruptarctag(0x00000000)请注意,每个GCDA文件都会显示错误消息。另请注意,它似乎不会影响测试用例。解决方法:如解释her

C++11 替代 boost::checked_delete

作为前向声明的重度用户,我喜欢我的类在销毁时完成。为确保这一点,我将析构函数设为私有(private)并与boost::checked_delete成为friend:#includestructMyClass{//MyClass'sinterfaceprivate:~MyClass(){/*something*/}friendvoidboost::checked_delete(MyClass*x);};在C++11中,std::default_delete还在销毁时检查完整性。然而,我无法实现与上面相同的行为:#includestructMyClass{//MyClass'sinter

c++ - c++ operator new[]/delete[] 是否调用 operator new/delete?

C++operatornew[]/delete[](不是我的)是否调用operatornew/delete?在我用自己的实现替换operatornew和operatordelete之后,下面的代码将调用它们:int*array=newint[3];delete[]array;并且当我也替换了operatornew[]和operatordelete[]时,上面的代码将只调用他们。我的运营商实现:void*operatornew(std::size_tblockSize){std::cout(block);blockSize=blockSize-sizeof(int);std::cout(

c++ - 为什么我收到 clang 警告 : no previous prototype for function 'diff'

我的代码中有以下声明://Centraldifffunction,makestwofunctioncalls,O(h^2)REALdiff(constREALh,constREALx,REAL(*func)(constREAL)){//diff=f(x+h)-f(x-h)/2h+O(h^2)return((*func)(x+h)-(*func)(x-h))/(2.0*h+REALSMALL);}这在“utils.h”文件中。当我使用它编译测试时,它会给我:clang++-Weverythingtests/utils.cpp-otests/utils.oInfileincludedfro

c++ - ThreadSanitizer 在使用嵌入式引用计数器时报告 "data race on operator delete(void*)"

请看下面的代码:#include#includeclassReferenceCounted{public:ReferenceCounted():ref_count_(1){}voidreserve(){ref_count_.fetch_add(1,boost::memory_order_relaxed);}voidrelease(){if(ref_count_.fetch_sub(1,boost::memory_order_release)==1){boost::atomic_thread_fence(boost::memory_order_acquire);deletethis;}}

c++ - 使用替换的 operator new 进行 Clang 链接时优化会导致 valgrind 中的 free()/delete 不匹配

当将clang3.5.0与-flto一起使用并与共享库链接时,似乎在共享库中调用operatordelete不遵循与调用相同的符号解析顺序来自主要对象的code>operatornew。示例:共享.cpp:voiddeleteIt(int*ptr){deleteptr;}ma​​in.cpp:#include#includevoid*operatornew(size_tsize){void*result=std::malloc(size);if(result==nullptr){throwstd::bad_alloc();}returnresult;}voidoperatordelet

c++ - 多重继承中使用operator delete时谁来调用类的Destructor

这个问题听起来可能太傻了,但是,我在其他任何地方都找不到具体的答案。对后期绑定(bind)的工作原理和继承中使用的virtual关键字知之甚少。在代码示例中,在继承的情况下,指向在堆上创建的派生类对象的基类指针和删除运算符用于释放内存,派生类和基类的析构函数将被调用仅当基类析构函数被声明为虚函数时才按顺序排列。现在我的问题是:1)当base的析构函数不是virtual时,为什么只有在使用“delete”运算符的情况下才会出现不调用deriveddtor的问题,为什么在下面给出的情况下不会:deriveddrvd;base*bPtr;bPtr=&drvd;//DTORcalledinpr

c++ - delete 使用的已分配内存的计数在内存中的确切位置?

int*Array;Array=newint[10];delete[]Array;delete知道分配内存的计数。我用谷歌搜索它存储在内存中,但它依赖于编译器。无论如何都可以使用获取此计数吗? 最佳答案 实际上,堆知道每个分配有多大。但是,这不是您可以轻松访问的东西,并且只能保证大于或等于请求的数量。有时为了字节对齐的好处分配更多。正如Ben所说,在某些情况下,实现确实知道数组中有多少对象,以便可以调用它们的析构函数。 关于c++-delete使用的已分配内存的计数在内存中的确切位置?,

c++ - SFINAE : Delete a function with the same prototype

我想知道这段有效代码之间有什么区别:#include#includetemplateusingis_ref=std::enable_if_t,bool>;templateusingis_not_ref=std::enable_if_t,bool>;template=true>voidfoo(T&&){std::cout=true>voidfoo(T&&){std::cout还有这个不起作用:#include#includetemplateusingis_ref=std::enable_if_t,bool>;templateusingis_not_ref=std::enable_if_t