草庐IT

delete_one

全部标签

c++ - C2280 : attempting to reference a deleted function (union, 结构体,复制构造函数)

当我尝试在VisualStudio2015中编译以下最小示例时,我遇到了误导性错误消息的问题:classVector{floatx;floaty;public:Vector(floatx,floaty):x(x),y(y){}Vector&operator=(constVector&v){x=v.x;y=v.y;return*this;}//Vector(Vector&&)=default;};classRect{public:union{struct{Vectorp1,p2;};struct{floatp1x,p1y,p2x,p2y;};};Rect():p1(0,0),p2(0,0

c++ - boost 梅森扭曲器 : how to seed with more than one value?

我正在使用boostmt19937实现进行模拟。模拟需要可重现,这意味着存储RNG种子并可能在以后重复使用。我正在使用windowscryptoapi生成种子值,因为我需要种子的外部来源,而不是因为任何特定的随机性保证。任何模拟运行的输出都会有一个注释,包括RNG种子-所以种子需要相当短。另一方面,作为模拟分析的一部分,我将比较几次运行——但为了确保这些运行实际上不同,我需要使用不同的种子——所以种子需要足够长以避免意外碰撞。我已经确定64位的播种应该足够了;在大约2^32次运行后发生碰撞的可能性将达到50%——这个概率足够低,以至于由它引起的平均错误对我来说可以忽略不计。仅使用32位

c++ - 在基类中重载运算符 delete

来自C++标准(ISO/IEC14882:2003(E)),§12.5.4,关于重载operatordelete:Ifadelete-expressionbeginswithaunary::operator,thedeallocationfunction'snameislookedupinglobalscope.Otherwise,ifthedelete-expressionisusedtodeallocateaclassobjectwhosestatictypehasavirtualdestructor,thedeallocationfunctionistheonefoundbyth

c++ - 算法的正确性和逻辑 : minimum steps to one

问题陈述:对于正整数,您可以执行以下3个步骤中的任何一个。从中减去1。(n=n-1)如果它能被2整除,则除以2。(如果n%2==0,则n=n/2)如果它能被3整除,则除以3。(如果n%3==0,则n=n/3)给定一个正整数n,您的任务是找到使n等于1的最少步数。我的递归解决方案(在C++中)比较了N可以被3整除的所有3种情况,而一般解决方案只比较2,但仍然给出了正确的解决方案。intmin_steps(intN){if(N==1)return0;else{if(N%3==0){if(N%2==0)return(1+min(min_steps(N/3),min_steps(N/2),mi

c++ - new/malloc 或 delete/free 是否占用或使缓存行无效?

我对缓存行为很好奇。下面是一些与缓存相关的问题:写操作是否将数据带入缓存?考虑像A[i]=B[i]这样的赋值,A[i]会被加载到缓存中吗?因为我只是将一些东西写入A[i]而不是读取它的值。分配大内存时,内存可能来自操作系统。出于安全原因,操作系统会将数据初始化为零(Reference)。如果赋值会把数据带入缓存(问题1),这种机制会占用缓存吗?假设有一个已分配的数组B,并且整个B现在都在缓存中。释放数组B后,B占用的缓存行是否会立即失效(可用)?有人可以给我提示吗? 最佳答案 从这里https://people.freebsd.or

C++ 零规则 : polymorphic deletion and unique_ptr behavior

在最近overloadjournal在执行零规则主题下,作者描述了我们如何避免编写五个运算符的规则,因为编写它们的原因是:资源管理多态性缺失这两个都可以通过使用智能指针来解决。这里我特别感兴趣的是第二部分。考虑以下代码片段:classBase{public:virtualvoidFun()=0;};classDerived:publicBase{public:~Derived(){coutpB=make_shared();pB->Fun();}在这种情况下,正如文章作者所解释的那样,我们通过使用共享指针进行多态删除,这确实有效。但是如果我将shared_ptr替换为unique_ptr

c++ - 在 `delete` 之后重用一个指针

执行以下操作是否安全和/或良好做法?//NewListisamemberfunctionofaclassvoidNewList(intsize){delete[]list;//listisamembervariable;analreadyinitializeddynamicarray.list=newListObject[size];}我基本上放弃了以前的数组,因为我将使用不同的数据存储在类中,因此需要一个新的list来存储关于新数据的其他信息。如果这不是好的做法,还有什么替代方案? 最佳答案 这取决于。每次用new创建一个对象,用

c++ - STL 中的 VS 编译器错误 C2752 ("more than one partial specialization matches")

不知何故,我喜欢这些显示(基本?)问题的“最短”程序。在VS2008中测试一些模板代码时出现了这个错误(它也已在VS2010和VS2012中得到确认,见下文):c:\programfiles(x86)\microsoftvisualstudio9.0\vc\include\xmemory(225):errorC2752:'std::_Ptr_cat_helper':morethanonepartialspecializationmatchesthetemplateargumentlistwith[_T1=constfloat(**),_T2=constfloat(**)]我可以将问题归

c++ - 动态内存分配-为什么程序末尾没有 "delete"?

我有2个关于以下程序的问题:1.程序是只创建动态元素(矩形和六边形类型),还是指向它们的指针也是动态的?2.为什么程序最后没有delete。例如这样的事情:(如果我正确地假设只有元素是动态的..)for(i=0;i非常感谢,这个网站在我的老师无法帮助的事情上帮助了我很多!石然程序是:intmain(){//CreatearrayofpointerstoShapesofvarioustypes.constintNUM_SHAPES=3;Shape*shapeArray[]={newHexagon(),newRectangle(),newHexagon()};//Setpositionso

c++ - C/C++ 中的 STL、iostream、new、delete for CUDA

我可以在C/C++中为CUDA使用STL、iostream、new、delete吗? 最佳答案 如果您有Fermi级GPU(因此计算能力>=2.0),并且正在使用CUDA4.0或更高版本,那么new和delete都可以使用在设备代码中。不支持STL容器和算法以及iostream。如果您想对CUDA使用“类似STL”的操作,您可能会对Thrust感兴趣模板库。它允许主机代码使用容器类型透明地与GPU交互,并实现许多非常有用的数据并行原语,如排序、缩减和扫描。请注意,这仍然是主机端设备,不能在您自己的内核代码中使用Thrust及其容器。