草庐IT

Pointers

全部标签

C++:为 std::sort 提供模板化比较函数

假设我想让std::sort根据指针指向的int值对指向int的指针vector进行排序。忽略那里明显的性能问题。简单吧?做一个函数:boolsort_helper(constint*a,constint*b){return*a并提供给std::sort。现在,如果我们还想对指向大对象的指针vector做同样的事情。同样的事情适用:首先我们定义一个对象中的运算符,然后按照以下几行创建一个函数:boolsort_helper(constob_type*a,constob_type*b){return*a或其他任何东西,将其提供给std::sort。现在,这就是它变得棘手的地方:如果我们想

c++ - 获取指向 vector 元素的指针

这个问题在这里已经有了答案:Doesinsertionofelementsinavectordamagesapointertothevector?(6个答案)doesapointertoanelementofavectorremainafteraddingtoorremovingfromthevector(inc++)(1个回答)关闭5年前。我遇到了一个我不太明白的问题:我正在用创建一个对象Edgeedge_vec1.push_back(Edge(src,dest));然后我想在一个单独的vector中保留一个指向这条边的指针:edge_vec2.push_back(&edge_vec

c++ - 为什么我不能使用与 'const int*' 相同的 'const char*' 创建一个 int 数组?

为什么我可以用这种方式创建一个字符串或字符数组:#includeintmain(){constchar*string="Hello,World!";std::cout?并且它正确输出第二个元素,而如果没有数组的下标符号[]我就不能创建整数类型的数组?char的一个和这个有什么区别:constint*intArray={3,54,12,53};。 最佳答案 “为什么”是:“因为字符串文字很特殊”。字符串文字存储在二进制文件中,作为程序本身的常量部分,constchar*string="Hello,World!";只是将文字视为存储在别

c++ - 不能使用指针作为默认模板参数

我正在尝试使用默认原始指针作为默认模板参数。我读到非类型模板参数仅限于整数类型、枚举、指针和引用。对于引用,我没有遇到任何问题,但是当我尝试使用指针时,我遇到了这样的错误:error:non-typetemplateargumentoftype'Engine*'isnotaconstantexpression.这是我的代码:#include#includeusingstd::cout;usingstd::endl;classEngine{public:voidstartEngine(){m_started=true;coutclassCar{public:explicitCar(con

c++ - 通过函数返回类指针

如何使用其函数返回Foo类的指针。我问的原因是因为我想让这段代码工作Classfofo.MakeA(34.5777).MakeY(73.8843);非常感谢您 最佳答案 假设你需要一个引用返回类型;classfoo{public:foo&MakeA(floata){//MakeAcodelogichere...return*this;}foo&MakeB(floatb){//MakeAcodelogichere...return*this;}}否则,您可以只返回一个拷贝(foo而不是foo&)。

c++ - weak_ptr 和父子循环依赖

我目前有类似以下内容:classParent{//justasinglechild...forsakeofsimplicity//nootherclassholdsashared_ptrreferencetochildshared_ptr_child;System*getSystem(){...}}classChild{weak_ptr_parent;~Child{_parent.lock()->getSystem()->blah();}}Child析构函数总是崩溃,因为当~Child()运行时_parent总是过期。是否有针对这种怪现象的典型解决方案?简而言之,有没有办法在~Chil

c++ - 没有智能指针怎么处理指针?

我正在阅读C++PrimerPlusbyStephenFrata.我已经阅读了第6章,这意味着我了解了指针,但没有了解对象和类(尽管我了解OOP)。我来自ActionScript(Flash)和Java背景,所以我以前从未处理过指针,但我理解它们。不过,我对它们有很多疑问。据我了解,您需要将new和delete配对,即创建指针的对象/函数负责释放它。但是想象一个简单的工厂函数,像这样:SomeObject*createSomeObject(){returnnewSomeObject;}这看起来很有问题。现在谁负责释放这个指针?如果我创建一个类,允许公开访问它创建的指针,会怎样?按照新建

c++ - 加速 C++ : Can I substitute raw pointers for smart pointers?

我喜欢这本书,遗憾的是它没有涵盖智能指针,因为它们在当时不是标准的一部分。那么在阅读本书时,我能否公平地将每个提到的指针分别替换为智能指针和引用? 最佳答案 “智能指针”有点用词不当。“聪明”的部分是他们会为你做一些事情,不管你是否需要、想要,甚至是否理解那些事情是什么。这真的很重要。因为有时候你会想去商店,智能指针会driveyoutochurch.智能指针解决了一些非常具体的问题。许多人会争辩说,如果你认为你需要智能指针,那么you'reprobablysolvingthewrongproblem.我个人尽量不偏袒任何一方。相反

c++ - 必须存在不相关的专业才能编译?

下面的代码(编译和执行正确,做我想做的事)是我在编写一个类来存储各种类型的属性时遇到的一个奇怪的例子,这些属性需要能够在它不再知道它们时删除指针类型。我的解决方案是制作一个带有模板函数的Deleter类,该函数可以获取和存储其地址以删除特定类型。我不明白为什么这段代码有效,特别是:为什么它没有命中断言?为什么/如何需要/使用(看似)无关的专业?代码:#include#include#include#include//Justhereasanunusedclasstospecializeusingnamespacestd;typedefvoid(*void_voidptr_func_t)

c++ - 这个数组声明有什么问题?

我在一个函数内创建了这个数组,变量MODEL_VERTEX_NUM在运行时初始化,我猜这就是症结所在。loatmodel_vertices[][]=newfloat[MODEL_VERTEX_NUM][3];我遇到了以下错误:1>.\GLUI_TEMPLATE.cpp(119):errorC2087:'model_vertices':missingsubscript1>.\GLUI_TEMPLATE.cpp(119):errorC2440:'initializing':cannotconvertfrom'float(*)[3]'to'float[][1]'我意识到当我这样做时:floa