草庐IT

checked_delete

全部标签

c++ - 类型特征 : Check if class have specific function (maybe inherit)

我知道有很多方法可以检测一个类是否具有特定功能,但没有一种方法真正适合我的具体情况。我当前用于检查正确成员函数的实现工作正常,继承函数除外。#includetemplateclassHasFoo{templatestructCheck;templatestaticstd::true_typeTest(Check*);templatestaticstd::false_typeTest(...);public:staticconstexprboolvalue=decltype(Test(0))::value;};structA{intfoo(float);};structB:publicA

c++ - 在 "delete this"之后访问局部变量

我有一个使用引用计数机制的类。当引用计数降为零时,通过调用deletethis最终销毁此类的对象。我的问题是:在deletethis之后我可以使用本地堆栈变量吗?这是一个更具体的例子:classRefCountedClass{public:RefCountedClass(Mutex&m):mutex_(m){}...private:Mutex&mutex_;voidRemoveReference(){//AsIunderstand,mutex_willbedestroyedafterdelete,//butusingmisallrightbecauseitison-stackand//

c++ - 使用可选参数重载 new 和 delete 运算符

#include#include#include#includestructfoo{};inlinevoid*operatornew(size_tsize,foo*)throw(std::bad_alloc){std::cout输出(viaideone):mynew1我的想法是,C++会释放一个带有附加参数的新对象,并匹配删除相同的参数,但我显然是不正确的。让上面的代码调用我的重载删除的正确方法是什么? 最佳答案 当你使用任何形式的placementnew时,除了std::nothrow_t版本,你需要明确地销毁对象并以你认为合适的

c++ - BOOST_CHECK_CLOSE 即使两个值低于阈值也会失败

我正在使用boost执行单元测试。当我使用BOOST_CHECK_CLOSE时,我收到此失败消息:difference{inf%}{-6.9388939e-18}and(0.0){0}exceeds1.0000000000000001e-05%这对我来说听起来很奇怪,因为-6.9388939e-18和0.0之间的差异低于1.0000000000000001e-05%。此外,我不明白为什么它说差异是无限的。知道这种行为背后的原因吗? 最佳答案 BOOST_CHECK_CLOSE使用Knuth的公差谓词来比较float,即abs(x-y

c++ - unique_ptr::deleter_type::pointer 有什么用?

std::unique_ptr指定存储不是T*如您所料,但是类型为std::unique_ptr::pointer的对象.这基本上定义为D::pointer如果存在这样的类型,并且T*否则。因此,您可以通过适本地自定义删除器来自定义底层原始指针类型。什么时候这样做是个好主意?它是干什么用的?我能找到的唯一讨论是thisnote,这暗示“更好地支持[ing]共享内存上下文中的容器和智能指针”,但这并没有完全说明很多问题。 最佳答案 最初的动机是启用boost::offset_ptr的使用作为unique_ptr下的表示,这将允许在进程

c++ - 除以零预防 : Checking the divisor's expression doesn't result in zero vs. 检查除数不为零?

由于减法中的浮点错误,在以下情况下是否可以被零除?floatx,y,z;...if(y!=1.0)z=x/(y-1.0);换句话说,下面是不是更安全一些?floatdivisor=y-1.0;if(divisor!=0.0)z=x/divisor; 最佳答案 假设IEEE-754float,它们是等价的。FP算法的一个基本定理是,对于有限的x和y,x-y==0当且仅当x==y,假设逐渐下溢。如果次正规结果被刷新为零(而不是逐渐下溢),则只有当结果x-y是正规的时,这个定理才成立。因为1.0的缩放比例很好,所以y-1.0永远不会低于正

c++ - 我可以像 delete[3] 一样为 delete[] 提供参数吗?

我读到delete[]可以释放对象数组。然而,在我读过的任何来源中都没有提到提供像delete[3]这样的参数是错误还是未定义。我有以下问题。是否在C++标准中指定了我是否可以/不能将参数提供给delete[]作为delete[3]?如果是,效果如何?在C++中是否还指定了我是否可以/不能对从new[]分配的数组使用delete? 最佳答案 (1)是的,它指定你不能。(3)指定结果未定义,所以不要。 关于c++-我可以像delete[3]一样为delete[]提供参数吗?,我们在Stac

c++ - BOOST_CHECK_EQUAL 与 pair<int, int> 和自定义运算符 <<

当尝试执行BOOST_CHECK_EQUAL(pair,pair)时,gcc没有找到pair的流运算符,尽管声明了它。有趣的是std::out找到了运算符。ostream&operator&p){s';returns;}BOOST_AUTO_TEST_CASE(works){pairexpected(5,5);pairactual(5,5);std::coutexpected(5,5);pairactual(5,5);BOOST_CHECK_EQUAL(actual,expected);}这不会编译错误:...instantiatedfromhere../boost-atp/relea

c++ - 当我在 C++ 中对未初始化的指针调用 "delete"时会发生什么?

假设我声明了一个char指针,并在没有调用new的情况下对其调用delete。这会导致问题吗?char*myptr;if(condition)//dosomethinginvolvingmyptr=newchar[SIZE];else//dosomethingthatdoesntinvolvemyptr//domorestuffdelete[]myptr;我没有删除if下的myptr,因为如果condition为真,则//domorestuff中的另一个指针可以指向它。显然,如果condition为真,这就可以正常工作,因为在myptr上调用了“new”。如果我进入else条件,其中m

c++ - delete p where p is a pointer to array always a memory leak?

在一次软件session上的讨论之后,我着手确定使用普通delete删除动态分配的基元数组是否会导致内存泄漏。我已经编写了这个小程序并使用在WindowsXP上运行的visualstudio2008对其进行了编译:#include"stdafx.h"#include"Windows.h"constunsignedlongBLOCK_SIZE=1024*100000;int_tmain(){for(unsignedinti=0;i然后我使用任务管理器监视我的应用程序的内存消耗,令人惊讶的是内存被正确分配和释放,分配的内存没有像预期的那样稳定增加我修改了我的测试程序以分配一个非基本类型数组