草庐IT

$C指针

全部标签

c++ - 是否有必要在 Qt 中删除对话框窗口指针?

我使用这段代码:MyDialog*md=newMyDialog();md->show();在Qt中打开一个对话窗口。md会在对话窗口关闭时自动删除,还是我需要在窗口结束时运行deletemd? 最佳答案 在你的小代码中你需要删除它,因为它没有父级,如果你设置父级,父级将删除它的子级,你只需要删除“主窗口”(没有父级的窗口)。对于QWidget派生类,您还可以使用:Qt::WA_DeleteOnClose标志,然后当小部件关闭时内存将被释放,请参阅文档here那么代码就会变成:MyDialog*md=newMyDialog();md-

C++智能指针之unique_ptr

C++智能指针之unique_ptr前言一、unique_ptr1.1unique_ptr类的初始化1.2unique_ptr禁止拷贝和赋值1.3release、reset函数1.4向unique_ptr传递删除器1.5unique_ptr与动态数组的使用总结前言  在C++中,动态内存的申请和释放是通过运算符:new和delete进行管理的。其中new负责申请内存,delete负责释放内存。  动态内存的使用很容易出现问题,这主要在于你需要保证在正确的时间释放内存,这是比较困难的,如果你忘记释放内存,就会造成内存泄露;有时在还有指针引用内存的情况下我们就释放了它,在这种情况下就会产生引用非法

c++ - "cast"指向 C++ 中函数指针的成员函数指针的最简单方法是什么?

我想为STL算法的“comp”参数提供一个成员函数,例如lower_bound(...,Comparecomp)。comp()函数访问非静态成员字段,因此它本身必须是非静态成员,但非静态成员函数指针的类型与普通函数指针的类型不同。解决这个问题的最佳方法是什么? 最佳答案 这是std::mem_fun和std::mem_fun_ref最常见的用法。它们是创建调用指定成员函数的仿函数的模板。TR1添加了一个std::tr1::bind,它也很有用且用途更广(如果您没有可用的TR1,那是基于Boost::bind的)。C++0x将在标准库

c++ - 没有匹配的调用函数(期望引用指针而不是指针)

我从xcode(3.2.4)/gcc(4.0)得到错误:/Users/admin/scm/audacity/mac/../src/toolbars/DeviceToolBar.cpp:Inmemberfunction'voidDeviceToolBar::ShowInputDialog()':/Users/admin/scm/audacity/mac/../src/toolbars/DeviceToolBar.cpp:817:error:nomatchingfunctionforcallto'DeviceToolBar::ShowComboDialog(wxChoice*&,wxStr

c++ - 如何安全地检查空指针

(使用visualstudio2010)我有一个简单的returnLength()列表函数,简单定义为intreturnLength(){if(!next)return1;elsereturn1+next->returnLength();}next是指向列表中另一个节点的指针。在检查if语句以检查next是否有效时,VisualStudio会引发运行时错误,引用访问冲突。此错误发生在递归树深处的多次调用中。检查指针是否存在的推荐方法是什么? 最佳答案 这是一个有效的方法。此处可能发生的情况是this为NULL,因此您在尝试从NULL

c++ - 避免 std::list 中的指针

我尽量避免有指针,而不是做std::list*>myList;voidaddElement(inta,intb){myList.push_back(newstd::pair(a,b));}我想我可以做类似的事情std::list>myList;voidaddElement(inta,intb){std::pairp(a,b);myList.push_back(p);}如果我对行为的理解正确,这应该存储对的拷贝,并在执行myList.clear()时自动删除它(与指针相反)。这是最好的方法吗?我可以期望编译器优化掉不必要的对象p吗? 最佳答案

c++ - 指针变量可以保存另一个指针变量的地址吗?

是否可以让一个指针变量保存另一个指针变量的地址?例如:inta;int*ptr,*ptr1;ptr=&a;ptr1=&ptr; 最佳答案 当然,指向指针的指针。inti;int*pi=&i;int**ppi=π指向指针的指针没有什么特别不寻常的地方。它和其他变量一样是一个变量,并且和其他变量一样包含变量的地址。只需设置正确的类型,以便编译器知道如何处理它们。 关于c++-指针变量可以保存另一个指针变量的地址吗?,我们在StackOverflow上找到一个类似的问题:

c++ - 将指向字符串文字的指针返回给调用者是否安全?

char*stringReturn(){chara[]="Arrayofcharacters";//returna;//Iknowstackallocationshouldnotbereturnedchar*b="Pointertoastring";returnb;//Isitsafe?}intmain(){char*str=stringReturn();cout这是安全的,意味着“指向字符串的指针”数据将存储在内存中的位置。 最佳答案 是的,返回b的值是安全的。b指向的字符串文字具有静态存储持续时间。但是,您必须正确地声明您的指针

c++ - 函数重载 C++ 指针

据我所知,如果参数个数不同,或者参数类型不同,那么重载一个函数是合法的。为什么仅仅返回类型的不同是不合法的?此外,这样重载是否合法:inthello(intx);inthello(int&z);还有inthi(intx);inthi(int*z); 最佳答案 编译器无法仅通过返回值来确定您要调用的函数。由于不需要捕获返回值,您可以这样写:hello(1);//returninthello(2);//returnfloat从看到的情况来看,它们是一模一样的。是的,这是合法的,因为第一个hi获取一个引用,第二个hi获取一个内存地址。你可

c++ - 参数通过引用传递给指针问题

每次我尝试编译我的代码时都会出现错误:cannotconvertparameter1from'int*'to'int*&'测试代码如下所示:voidset(int*&val){*val=10;}intmain(){intmyVal;int*pMyVal=newint;set(&myVal);//我想一次调用该函数,而不是在某处创建一个指针来传递它。由于指针没有构造函数,因此无法完成类似的操作:set(int*(&myVal));有没有其他方法可以通过引用传递指针而不需要创建临时变量?编辑:顺便说一句,我知道为什么代码无法编译(我只是传递可能是int而不是实际指针的地址)。问题是它还能如