草庐IT

$双指针

全部标签

c++ - 1000个共享指针占用多少内存?

(例如)1000个共享指针需要多少内存?是16x1000字节吗?32位和64位系统有什么不同吗? 最佳答案 在典型的实现中,std::shared_ptrholdsonlytwopointers.因此1000个共享指针占用1000*2*sizeof(pointer)字节的内存。在遵循ILP32数据模型的所有32位系统上,指针的大小为4个字节。在遵循LP64数据模型(大多数Unix和类Unix系统)或LLP64数据模型(MicrosoftWindowsx86-64)的64位系统上,指针的大小为8个字节。注意:控制block的大小(取决

c++ - 为什么 C++ 中指向方法取消引用运算符的指针具有如此低的优先级?

C++中指向成员解引用运算符(.*和->*)的指针的运算符优先级为4,而函数调用运算符的优先级为2。这几乎可以保证需要括号:#includestructA{intb;intfunc1(inta){returna+b+1;}intfunc2(inta){return2*a+b;}};intmain(){Aa;a.b=3;int(A::*ptr)(int);ptr=&A::func1;std::cout在我看来,将.*定义为优先级2会(具有从左到右的关联性)否定括号的需要,并且没有明显的不良副作用。选择这个优先级的原因是什么? 最佳答案

C++ 模板静态成员指针初始化

我有一个模板类,它有一个指向成员的静态指针,如下所示:templateclassQueue{T*head;T*tail;staticT*T::*pnext;};我的问题是如何编写指向成员的静态指针的初始化程序。我尝试了明显的情况:templateT*Queue::*pnext(nextptr);但这没有用。有什么想法吗? 最佳答案 你真的需要一个与模板参数具有相同值的模板静态成员变量吗?唯一的用途是它的值在程序的整个生命周期内发生变化,但我真的想不出任何情况会产生比造成困惑更多的好处。

c++ - 在 C++ 中用作闭包的函数指针

在C++中有没有一种方法可以有效地创建一个将成为函数指针的闭包?我正在使用Gnu科学图书馆,我必须创建一个gsl_function.这个函数需要有效地“关闭”我创建它时可用的几个参数。是否有一个很好的技巧来创建一个闭包,这样我就不必将它们全部作为gsl_function结构中的参数传递?如果不是,我是否应该只传递一个指向包含这些参数的数组的指针?编辑我试过像这样使用boost::bind:#include#include#include"bondpricecalculator.h"#include"functions.h"doubleintegrand(doublexi,doublet

c++ - 从基类指向成员的指针类型

我对成员指针有疑问。以下代码无法使用OracleSolarisStudio12.2的CC和cygwinGCC4.3.4进行编译,但可以使用MicrosoftVisualC++2010:structA{intx;};structB:publicA{};templateclassBar{public:templatevoidfoo(MT::*p);};intmain(int,char*[]){Barbbar;bbar.foo(&B::x);return0;}在倒数第二行,上述两个编译器都未能找到Bar::foo(intA::*)的匹配项.我写了一个简单的测试来确认表达式的类型&B::x实际

c++ - 排序指针列表的问题

我正在尝试对指针列表进行排序(在我的例子中,每个指针都是Job类型)我的意图是按序列号对作业进行排序voidContainer::jobSort(list&jobs){sort(jobs.begin(),jobs.end(),jobSerialCompare);}boolContainer::jobSerialCompare(constJob*jobA,constJob*jobB){return(jobA->getSn()getSn());}我得到的错误是:error:nomatchingfunctionforcallto'sort(std::_List_iterator,std::_

c++ - 具有静态存储持续时间的对象中未初始化的指针是否初始化为 NULL 或全零?

出于好奇,也因为我手头没有标准拷贝:如果空指针不是由全零模式表示的实现,具有静态存储持续时间的对象的未初始化指针成员将被初始化为正确的空指针值,还是初始化为全零值?更少的标准语言,更多的代码:structfoo{void*p;};foof;给定0x00000001的NULL指针表示,对于main()开头的f.p的按位表示,我能期待什么? 最佳答案 标准说(8.5/4):Tozero-initializeanobjectoftypeTmeans:—ifTisascalartype,theobjectissettothevalue0(z

C++模板中函数指针的c++错误C2064

如果我编译下面的代码,我会得到一个"ErrorC2064:termdoesnotevaluatetoafunctiontaking2arguments"在doOpp()方法中。如果我将q=f(p,i);更改为q=add(p,i);一切都可以正常编译(使用add()是doOpp()方法中的第二个参数)。我尝试了几种解决方案,但似乎没有任何效果。templateclassPoints{public:Points(void);Points(Point3d*,int);Points(T*,int);Points(Points&);~Points(void);voidclear();intsiz

c++ - 函数指针作为 C++ 中的参数?

我对函数指针的参数形式感到困惑。以下两个:intfun(int(*g)()){cout这两个定义都适用。但是正如您所注意到的,这两个函数的原型(prototype)存在一些差异:第一个接受参数int(*g)(),而第二个采用参数intg()。我的问题是它们之间有什么区别吗? 最佳答案 在第二种情况下,函数类型调整为指针函数类型,这使得两个函数完全相同。intfun(int(*g)());intfun(intg());//sameasabove,aftertypeadjustmentC++03标准在§13.1/3中说,Paramete

c++ - 你能判断 C++ 指针是否已被破坏吗?

我有一个全局单例,它被我程序中的许多对象使用。当程序关闭时,这会导致崩溃-在单例本身被程序结束破坏后,它被用于某些对象的析构函数。有没有一种可移植的方法来判断指针是否调用了“删除”?在我的例子中,删除似乎将指针的值更改为(void*)(-1),但我不知道这是否可移植。 最佳答案 不,无法判断C++指针指向的对象是否已被销毁。您可以使用自动处理它的智能指针。 关于c++-你能判断C++指针是否已被破坏吗?,我们在StackOverflow上找到一个类似的问题: