草庐IT

delete-operator

全部标签

c++ - 多个 C++ 删除多个对象指向的内存

另一个C++指针删除问题如下例:classFoo{public:int*p;~Foo(){deletep;p=NULL;}};Foo*f1=newFoo();Foo*f2=newFoo();f1->p=newint(1);f2->p=f1->p;deletef2;//okdeletef1;//noerror?为什么我在调用“deletef1”时没有报错?我不是删除了同一个地址(*p)两次吗?如果直接删除最后两行代码中的指针,会报错。deletef2->p;//okdeletef1->p;//error!!***glibcdetected***doublefreeorcorruption

c++ - 具有指针数组 C++ 的类的析构函数

如果我有一个包含指向另一个类Vehicle的指针数组的类:classList{public://stuffgoeshereprivate:Vehicle**vehicles;}如果我现在编写List类的析构函数,我是否手动遍历数组(我知道数组中有多少项)并删除每个指针到车辆,还是C++会自动调用数组中所有车辆的析构函数?(如果类中有一个私有(private)字符串/...,或者如果它是Vehicle指针的STL容器,就像它所做的那样)编辑:我忘记了delete[]vehicles,但如果我这样做,它会同时删除数组中所有车辆使用的内存,还是只删除指针使用的内存?

c++ - Visual Studio 2010 C++ 运行时错误

我在VisualStudio2010C++编译器中遇到了奇怪的行为。以下代码编译但在执行后抛出“调试断言失败”留言:"_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)"在GCC下编译运行流畅。是我的错吗?#include#includeusingnamespacestd;typedefunsignedintuint;classFoo{vectorcoll;public:voidadd(int*item){coll.push_back(item);}~Foo(){for(uinti=0;i 最佳答案 您没有

c++ - "No match for operator="试图在 C++ 中遍历映射

我正在尝试遍历定义如下的map:std::map>ridx_;现在我尝试在以下重载运算符的友元函数中遍历ridx_(它是一个类的私有(private)成员)std::ostream&operator>::iteratorit;//Thefollowingisline34for(it=m.ridx_.begin();it!=m.ridx_.end();it++)osfirst但是g++错误输出:SMatrix.cpp:34:error:nomatchfor'operator='in'it=m->SMatrix::ridx_.std::map::beginwith_Key=unsigned

c++ - std::map 的 int 类型比较的 operator< 重载? (我希望它按降序排序..)

我遇到了一个问题,我想定义一个map,它在内部按第一个的降序排序。如果第一个不是主要类型,比如它是一个类,我可以在该类中重载“非常感谢!! 最佳答案 添加比较器:#includemap>m;默认为less. 关于c++-std::map的int类型比较的operator https://stackoverflow.com/questions/8659744/

c++ - operator new 已经有一个主体

我正在尝试将参数作为全局参数来实现operatornew。如果没有args的new重载没有问题,但是在尝试编译时出现以下错误inlinevoid*operatornew(size_t,void*p){//...returnp;}c:\bjarne_exercise_6.cpp(14):errorC2084:function'void*operatornew(size_t,void*)throw()'alreadyhasabodyc:\programfiles\microsoftvisualstudio10.0\vc\include\new(55):seepreviousdefiniti

c++ - 为什么 C++ STL 容器使用 "less than"operator< 而不是 "equal equal"operator== 作为比较器?

在std::map的自定义类中实现比较运算符时,我遇到了这个问题,但看不到任何被问到的地方。除了上述问题,也有兴趣简要了解,如何operator适用于std::map.问题来源:structAddress{longm_IPv4Address;boolisTCP;booloperator 最佳答案 std::map需要能够排序。默认情况下使用std::less,对于非指针使用1。使用您对用户的要求最少的规则,它从综合“等价”当它需要它时(!(a表示a和b是等价的,即两者都不小于另一个)。这使得编写用作map的关键组件的类变得更加容易,

c++ - operator bool() 转换为 std::string 并与 operator std::string() 冲突

在类中声明operatorstd::string时,operatorbool()怎么会导致错误,而且它本身还充当到string的隐式转换?#include#includeusingnamespacestd;classTest{public:operatorstd::string(){cout 最佳答案 您面临的问题(除了operatorstd::string()返回bool之外)是隐式转换在您需要和不需要时触发。当编译器看到s=t时,它会识别以下潜在的std::operator=匹配项://usingstd::stringforco

c++ - myVector.erase(myObject) 是否在 myObject 上调用 delete?

类似于thisquestion但使用对象而不是指针。如果我有如下代码Foof;vectorvect;vect.push_back(f);vect.erase(vect.begin());我的对象去了哪里?是否调用了删除?如果其他人持有指向它的指针怎么办?这是内存泄漏吗? 最佳答案 push_back在vector中存储f的拷贝,然后erase销毁它。f本身不受此影响。当您删除时,vector中元素的所有指针、引用和迭代器都将失效。在erase之后使用它们访问元素会产生未定义的行为。 关于

c++ - 将 operator== 重载为带有模板参数的自由函数的语法是什么?

我有一组多态类,例如:classApple{};classRed:publicApple{};classGreen:publicApple{};以及比较它们的自由函数:booloperator==(constApple&,constApple&);booloperator我正在设计一个可复制的包装器类,它将允许我使用类Red和Green作为STL映射中的键,同时保留它们的多态行为。templateclassCopy{public:Copy(constCat&inCat):type(inCat.clone()){}~Copy(){deletetype;}Cat*operator->(){