草庐IT

$双指针

全部标签

c++ - 在 C++ 中,是否允许将函数指针转换为一个函数指针,该函数指针作为参数获取一个指向基类或派生类的指针?

以下是否会按预期工作?structA{};structB:publicA{intx;};voidf(B*o){std::coutx(f)(&b);} 最佳答案 强制转换后使用此类指针的未定义行为:Anypointertofunctioncanbeconvertedtoapointertoadifferentfunctiontype.Callingthefunctionthroughapointertoadifferentfunctiontypeisundefined,butconvertingsuchpointerbacktopoi

c++ - 函数需要参数并返回指向 void 函数的指针

我有几个void函数在我的代码中做一些重要的事情。voidfunction1(Myclassclass1,intmyvar){//dosomestuff}voidfunction2(Myclassclass1,intmyvar){//dosomeotherstuff}//...maybesomemoresimilarfunctions我想创建一个函数,它会根据我传递的参数返回指向这些函数中的任何一个的指针。我不知道该怎么做。我想要类似的东西void*choosefunction(inti,intj){if(i==j)return(void*)function1;elsereturn(v

c++ - 创建共享指针的首选方式

documentation指出std::make_shared通常为T分配内存和智能指针的控制block立即对比std::shared_pointer(newT),执行两次分配。这是否意味着它更有效率,因此应该始终使用std::make_shared如果可能的话?关于Qt等效项的相同问题-QSharedPointer.根据docsQSharedPointer内部结构和对象分配在一个内存分配中,这有助于减少长时间运行的应用程序中的内存碎片。是不是表示QSharedPointer::create()是首选吗?classMyClass{};QSharedPointerptr1=QShared

c++ - move 语义只是一个浅拷贝并将其他指针设置为空吗?

我一直在阅读C++中的move语义,在解释中人们给出了很多类比来帮助简化它,在我的脑海中我能看到的是人们所说的“move”而不是“复制”“只是对象的浅表拷贝,并将“移出”对象中的任何指针设置为空。这基本上是要点吗?浅拷贝并将其他指针设置为空? 最佳答案 Shallowcopyandsetother'spointerstonull?浅拷贝-是的。将其他人的指针设置为null-并非总是如此。最低要求是被移出的对象处于“未定义但有效的状态”,也就是说你可以重新分配给它,再次move它或删除它而不会导致程序失败,但不执行其他状态相关的操作。

c++ - 使用 new 并能够检查指针是否为 0(空)

有人告诉我这样做,int*i=newint();我将无法检查我的指针是否为0。new发送异常以防失败。但是,如果我出于某种原因不想使用异常怎么办。有什么方法可以检查我的指针是否正确分配? 最佳答案 阅读文档:http://www.cplusplus.com/reference/new/operator%20new/(2)nothrowallocationSameasabove(1),exceptthatonfailureitreturnsanullpointerinsteadofthrowinganexception.以及示例:st

c++ - 移动数组指针不会改变起始地址

我的代码:#includeusingnamespacestd;intmain(){char*test=(char*)malloc(sizeof(char)*9);test="testArry";cout结果:004FF804|testArry004FF804|estArry我不明白为什么我移动了我的数组指针而地址却没有改变。 最佳答案 指针确实改变了。你只是不打印它。打印指针test:cout&test是test所在的内存位置已存储。test是您用test++递增的值(即,您没有增加&test)。当你做coutoperator的过载

c++ - noexcept 运算符在调用指向成员函数的指针后失败

这个MWE可能看起来做作,但失败的static_assert仍然令人惊讶:#includestructC{voidf()noexcept{}usingF=void(C::*)();staticconstexprFhandler()noexcept{return&C::f;}voidg()noexcept(noexcept((this->*handler())())){}};intmain(){static_assert(noexcept(std::declval().g()));}魔杖链接:https://wandbox.org/permlink/a8HSyfuyX1buGrbZ我希望

c++ - 如何用空指针初始化 unique_ptr 的 vector ?

我需要初始化一个vector>与nullptr秒。this中的方法帖子太复杂了。我的情况比较特殊,只需要初始化为nullptr.我怎样才能实现它?我知道我可以使用for循环来push_back一个nullptr每一次。有什么优雅的方法吗?顺便说一句,make_unqiue不适用于我的编译器。#include#include#includeusingnamespacestd;structTNode{//charch;boolisWord;vector>children;TNode():isWord(false),children(26,nullptr){}};intmain(){TNod

c++ - 由于分配,c++中的指针算术

我创建了一个类,其中包含3个相同类型的元素(类似std::pair>)。而且我准备使用for(auto&var:t)但我不知道我这样做是否安全。templateclassTroika{public:Troika(constT&f,constT&s,constT&t):first(f),second(s),third(t){}Troika(){}Tfirst;Tsecond;Tthird;typedefT*iterator;typedefconstT*const_iterator;iteratorbegin(){return&first;}const_iteratorbegin()con

使用Factory Builder使用类指针的通用缓存适配器的工厂

我正在尝试提供通用javax.cache合规适配器课程javax.cache.configuration.FactoryBuilder检索然后由该工厂使用ignite实例化缓存。所描述的问题可能会使用ApacheIGNITE,但是,我认为这不一定与IGNITE有关,而是与Java中的仿制药和封闭方式有关。点火CacheStoreAdapter接口是从javax.cache.CacheLoader和javax.cache.CacheWriter我正在提供适配器实现。该实现需要两种用于缓存键和值的(通用)类型,以及值类引用才能实例化适配器中的值。参见部分课程MyCacheAdapter以下。pub