草庐IT

指针认证

全部标签

c++ - std::unique_ptr 和指向指针的指针

我想结合使用std::unique_ptr和FreeImage的FITAG。普通C中的代码将是:...loadimage;FITAG*tag=NULL;FreeImage_GetMetadata(FIMD_EXIF_EXIF,bitmap,"Property",&tag);...dosomestuffwithtag;FreeImage_DeleteTag(tag);...deleteimage;我对unique_ptr的尝试:std::unique_ptrtag(NULL,&FreeImage_DeleteTag);FreeImage_GetMetadata(FIMD_EXIF_EXI

C++ 唯一指针 : memory leak

我对唯一指针的释放方法有点困惑。这是我的示例程序。classTest{public:Test(){std::coutptr(newTest());ptr.release();//memoryleak//ptr.reset();//thisisokbutnotnecessaryreturn0;}输出:ctor因为它没有打印dtor我假设它没有调用Test的析构函数,这将导致内存泄漏。是吗? 最佳答案 release一词的意思是“将所有权释放给调用者”。所以不,它没有调用析构函数。如果您想显式调用析构函数,那么您必须手动删除releas

c++ - 放置指向 shared_ptr 的多重映射的指针不起作用

vector工作正常Headerstd::vector>subnodes_m;DefinitionvoidCompositeSceneNode::AddChild(SceneNode*subnode_p){subnodes_m.emplace_back(subnode_p);}multimap没有Headerstd::multimap>subnodes_m;DefinitionvoidCompositeSceneNode::AddChild(SceneNode*subnode_p,unsignedintlayerIndex){subnodes_m.emplace(layerIndex,

c++ - 函数指针 : is the simple canonical use bad from a performance point of view? 如果是的话,c++11-ish 的替代方案是什么?

我在我的c++代码中经常使用函数指针,总是以符合这个简单规范示例的方式使用(例如,函数具有相同的I/O,但所需的操作只是在运行时已知):#includeusingnamespacestd;intadd(intfirst,intsecond){returnfirst+second;}intsubtract(intfirst,intsecond){returnfirst-second;}intoperation(intfirst,intsecond,int(*functocall)(int,int)){return(*functocall)(first,second);}intmain()

c++ - std::function 与函数指针

这个问题在这里已经有了答案:ShouldIusestd::functionorafunctionpointerinC++?(6个答案)关闭7年前。有什么区别吗?“保存/传输”功能的最佳方式是什么?functionfcn=[](intpar){std::cout

C++ 将 Lambda 与 vector 中的函数指针区分开来

我正在编写一个小的事件管理器类,我在其中将一些函数指针存储在一个vector中。我用std::function作为vector类型,我测试了在其中插入lambdas和普通函数并且它有效:voidt(intp){/*things*/}[...]event.bind([](intp){/*things*/});event.bind(t);现在,(在某个时候我需要删除lambda而不是函数,)我的问题是:是否可以将lambda与函数区分开来?如果是,怎么做?编辑:既然我澄清了我的疑惑,这个问题就如题所示 最佳答案 真正的答案是:你不想这样

c++ - 在 C++ 中使用指针总是不好的吗?

我被告知要避免在C++中使用指针。似乎我无法避免它们,但是在我尝试编写的代码中,或者我可能错过了其他很棒的C++功能。我希望创建一个类(class1),其中包含另一个类(class2)作为数据成员。然后我希望class2了解class1并能够与之通信。我可以将class1引用作为class2中的成员,但这意味着我需要在class2的构造函数中提供对class1的引用作为参数,并使用我不想要的初始化列表。我试图在不需要构造函数的情况下执行此操作。我希望class2有一个名为Initialise的成员函数,它可以接收对class1的引用,但如果不使用指针,这似乎是不可能的。人们会在这里推荐

c++ - 将指针设置为空后通过指针访问函数

这个问题在这里已经有了答案:AccessingclassmembersonaNULLpointer(8个答案)关闭6年前。我不明白下面这段代码是如何产生给定输出的。#includeusingnamespacestd;classMyClass{public:voiddoSomething(){coutdoSomething();ptr=NULL;ptr->doSomething();}输出在doSomething里面里面做某事我执行了一个带有空指针的函数,它实际上调用了该函数。使用ptr的cout检索存储在ptr中的地址表明在语句ptr=NULL之后ptr被设置为0;.但它仍然调用doS

c++ - 从派生类调用时推断 'this' 指针类型?

我在基类中有一个方法需要传递给它的类型以进行一些与类型相关的操作(查找、大小和一些方法调用)。目前它看起来像这样:classbase{templatevoidBindType(T*t);//dosomethingwiththetype};classderived:publicbase{voidfoo(){do_some_workBindType(this);}};classderivedOther:publicbase{voidbar(){do_different_work...BindType(this);}};但是,我想知道是否有一种方法可以获取调用者的类型而不必传递它,以便我的调

c++ - 为什么函数指针地址在 C++ 中以 bool 类型打印?

从下面的代码片段中我得到函数的地址是1。为什么?#includeusingnamespacestd;intadd(intx,inty){intz;z=x+y;cout 最佳答案 函数指针不能转换为数据指针。如果您尝试将一个分配给void*,则会出现编译器错误。多变的。但它们可以隐式转换为bool!这就是为什么booloperator过载在constvoid*上选择一个。要强制执行所需的重载,您需要使用非常强大的C++转换,这将几乎完全忽略静态类型信息。#includeusingnamespacestd;intadd(intx,int