草庐IT

logically_deleted_y

全部标签

c++ - 删除数组时delete和delete[]是一样的吗?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicates:Howcouldpairingnew[]withdeletepossiblyleadtomemoryleakonly?(POD)freeingmemory:isdelete[]equaltodelete?使用gcc版本4.1.220080704(RedHat4.1.2-48)。还没有在VisualC++上测试过它。似乎delete和delete[]在删除“简单”类型的数组时效果相同。char*a=newchar[1024];delete[]a;//thecorrectway.nomemoryleak.cha

c++ - C++中new和delete的使用

我需要帮助来理解何时应该使用以下选项char*a=newchar();和char*a=newchar[sizeof(int)+1];以及应该如何进行相应的内存释放调用? 最佳答案 任何时候你使用newT,之后你必须在结果指针上调用delete。任何时候你使用newT[n],你都必须在之后对结果指针调用delete[]。这就是它的全部内容。但请注意,您通常根本不应该使用它们。如果你需要一个字符串,不要分配一个字符数组。只需声明一个std::string(不使用new)。如果您需要一个大小在运行时确定的数组,请不要分配数组。声明一个st

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

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

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

hibernate - "migrate business logic code into our domain model"是个好主意吗?

我正在阅读HibernateinAction,作者建议将业务逻辑移动到我们的域模型中(第306页)。例如,在本书提供的示例中,我们有三个实体,分别名为Item、Bid和User,作者建议添加一个placeBid(Userbidder,BigDecimalamount)方法到Item类。考虑到通常我们有一个独特的业务逻辑层(例如Spring中的Manager或Service类),其中包括控制事务等,这真的是一个好建议?不给我们的实体添加业务逻辑方法不是更好吗?提前致谢。 最佳答案 如前所述Wehaveadistinctlayerfor

hibernate - "migrate business logic code into our domain model"是个好主意吗?

我正在阅读HibernateinAction,作者建议将业务逻辑移动到我们的域模型中(第306页)。例如,在本书提供的示例中,我们有三个实体,分别名为Item、Bid和User,作者建议添加一个placeBid(Userbidder,BigDecimalamount)方法到Item类。考虑到通常我们有一个独特的业务逻辑层(例如Spring中的Manager或Service类),其中包括控制事务等,这真的是一个好建议?不给我们的实体添加业务逻辑方法不是更好吗?提前致谢。 最佳答案 如前所述Wehaveadistinctlayerfor

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++ - 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