草庐IT

static成员

全部标签

c++ - 执行成员函数时对象被删除?

我有指向单例类的指针对象。线程1:当前正在执行上述对象的一个​​成员函数。线程2:当对象的成员函数还在被线程1执行时,删除上面的对象。正在执行成员函数的线程1发生了什么?是否会中途停止执行? 最佳答案 这可能是未定义的行为,除非你格外小心。在您的线程以无序(非同步,基本上)方式访问对象时删除该对象是未定义的行为,即使您走运也是如此。在与主线程的删除同步后访问对象的成员(不仅仅是运行成员:实际访问成员——调用成员函数、读取成员变量等)也是未定义的行为。如果你小心地与主线程同步,那么在同步之后不要访问成员数据也不要调用不同的成员函数,并

c++ - 如何初始化静态成员对象?

我不知道我不知道这个:)。和一个similarquestionhere没有太大帮助。所以我在这里问。请考虑以下类(class)://inAgent.hclassAgent:publicns3::Object{private://...staticBaseWifim_wifi;//...};这是://Agent.cppBaseWifitemp;BaseWifiAgent::m_wifi=temp;与此非常不同://Agent.cppBaseWifiAgent::m_wifi=BaseWifi();第二种方法对我不起作用。为什么以及如何?我不想用更多的代码来麻烦你,因为我在我的程序深处遇到

c++ - 我可以使用成员元素作为类方法的默认参数吗?

Minimum方法返回二叉搜索树中的最小元素。如果没有传递参数,它会打印调用对象的最小值。如果传递了一个节点的地址,它会打印出以节点为根的子树的最小值编译时显示“无效使用非静态数据成员Tree::root”#include#includeclassNode{public:Node*leftchild;Node*rightchild;Node*parent;intinfo;};classTree{public:Node*root;Tree(){root=NULL;}voidMinimum(Node*);};voidTree::Minimum(Node*curnode=root){Node

c++ - 为什么一个非常量静态成员会有多个定义?

C++强制程序员在类外定义一个非常量静态成员,我一直看到的原因是如果静态成员是在类内定义的,这将导致静态成员的多个定义。我明白有静态成员的多个定义是不好的,但我不明白这些多个定义在哪里定义甚至会来自。不应该是一个初始化的非常量静态成员只是进入数据部分,这是唯一的定义?structStudent{staticintx=4;//Whywouldthisresultinmultipledefinitions?};此外,我在另一篇stackoverflow帖子中读到,conststatic成员在使用它的任何地方都被简单地内联到代码中:Whycan'tIhaveanon-integralstat

c++ - sf::Texture 作为类成员不起作用?

嘿,我想在我的SFML应用程序中绘制一个Sprite,但是当我使用作为类成员的图像和纹理时,它的纹理总是白色类(class)成员:sf::Spritemyimg;sf::Imagemyimg_image;sf::Texturemyimg_texture;当我在我的cpp文件中创建这样的Sprite时//createimagemyimg_image.create(icon.width,icon.height,icon.pixelData);//createtexturefromimagemyimg_texture.create(icon.width,icon.height);myimg_

c++ - 如何将 C++ 函数指针(非静态成员函数)传递给预定义的 C 函数?

我正在考虑使用来自http://users.ics.forth.gr/~lourakis/levmar/的库,这是用C语言编写的。但是我将它包含在一个成员函数“dlevmar_der”中,它期望两个函数指针作为它的参数:intdlevmar_der(void(*func)(double*p,double*hx,intm,intn,void*adata),void(*jacf)(double*p,double*j,intm,intn,void*adata),double*p,/*I/O:initialparameterestimates.Onoutputcontainstheestima

C++ 流引用作为类成员

我有一个类是这样的:#includeclassA{public:A(std::istream&is):_is(is){}voidsetInputSource(std::istream&is){_is=is;}A&operator>>(int&x){_is>>x;return*this;}private:std::istream&_is;};我想要_is成员(member)仅供引用。我的意思是,它必须“指向”外部std::istream我不想要setInputSource()复制作为参数传递的流的方法。问题是程序无法编译,因为我提到的那个方法试图访问operator=类(class)st

c++ - 作为成员变量的 vector 上的基于范围的 for 循环

C++11使用基于范围的for循环迭代作为类成员的std::vector的代码是什么?我已经尝试了以下几个版本:structThingy{typedefstd::vectorV;V::iteratorbegin(){returnids.begin();}V::iteratorend(){returnids.end();}private:Vids;};//ThisgiveerrorinVS2013autot=newThingy;//std::make_unique()for(auto&i:t){//...}//ERROR:errorC3312:nocallable'begin'funct

c++ - 使用即时计算的临时值为 ForwardIterator 实现成员访问运算符->

我正在为一个适配器范围实现一个迭代器,它懒惰地评估原始范围上的某些东西。这意味着:取消引用迭代器应该取消引用底层迭代器并对结果应用一些操作,然后返回该操作的结果。Toperator*()const{returnsomeOperation(*original_iterator);}如何实现类似于此operator*的operator->?在查看其他迭代器的实现时,它们通常返回一个T*。但是我不能返回一个指针,因为“指向对象”是一个临时的、即时计算的。在这种情况下,通常的指导是什么?我可以简单地返回一个T吗?虽然我个人不需要这个运算符(我也可以使用(*i​​).m而不是i->m并且标准算法

c++ - 定义或绑定(bind)成员函数到 'variable like' 关键字。不带括号的执行

有没有办法将成员函数绑定(bind)到成员变量之类的东西?假设我有一个简单的vector结构:structVec3{intx,y,z;Vec2xy()const{returnVec2(x,y);}Vec2xz()const{returnVec2(x,z);}Vec2yz()const{returnVec2(y,z);}}现在我可以像这样使用它了:Vec3t={5,3,2};Vec2s=t.xy()+t.yz();但是有没有办法像这样使用它:Vec3t={5,3,2};Vec2s=t.xy;//thishere?executefunctionwithout'()'.