草庐IT

Pointers

全部标签

C++:如何提高经常被复制的自定义类的性能?

我正从Java转向C++,但我在理解C++类的工作原理和设计它们的最佳实践方面遇到了很多困难。具体来说,我想知道在以下情况下我是否应该使用指向我的类成员的指针。我有一个自定义类Foo,它表示特定回合的游戏状态,Foo有一个自定义类Bar的成员变量,它表示该游戏状态的逻辑子集。例如,Foo代表棋盘,Bar代表受到攻击的棋子及其逃跑Action(不是我的具体情况,而是我认为更普遍的类比)。我想通过复制Foo并相应地更新拷贝的状态来搜索一系列移动。当我完成搜索该移动序列时,我将丢弃该拷贝,并且仍然有代表当前游戏状态的原始Foo。在Foo.h中,我声明了我的Foo类,并为其声明了一个Bar类型

C++ 将方法指针作为模板参数传递

我有一个这样的调用函数:templatevoidCallMethod(T*object){(object->*method)(args);}虽然这很完美:void(*function)(A*)=&CallMethod;这段代码在第二行没有编译错误:void(A::*method)()=&A::method;void(*function)(A*)=&CallMethod;有什么办法可以解决吗?我需要CallMethod模板获取指向存储在变量中的方法的常量指针。 最佳答案 所有模板参数必须在编译时已知。所以如果method真的是一个变量

c++ - 什么类型的指针操作

我搜索了很多,但找不到任何有用的东西-但后来我不确定我正在搜索正确的东西。是否有任何标准定义的标量必须至少与指针一样大?IE。sizeof(?)>=sizeof(void*).我需要它,因为我正在编写一个小型垃圾收集器并且想要类似这样的东西:structTag{uint32_tdesc:sizeof(uint32_t)*8-2;//pointertotypedescriptoruint32_tfree:1;uint32_tmark:1;};我更喜欢根据标准有效的东西(如果我们这样做,我很惊讶sizeof(uint32_t)*8-2对于位域定义有效-但VS2010允许它)。那么size_

C++,从同一个原始对象复制的多个对象中的成员指针的 'coupling'

#include#include#include#includestructs_A{boolbin;s_A():bin(0){}};classc_A{public:s_A*p_struct;c_A():p_struct(NULL){p_struct=news_A[16];}voidReset(){delete[]p_struct;p_struct=news_A[16];}};intmain(){srand(1);intx=30;std::vectorobjects;objects.assign(x,c_A());std::vectorobjects_copy;for(intq=0;q不

c++ - 将二维数组作为参数传递

在这个例子中:inta[2][2]={{1,2},{3,4}};int*p=a[0];cout两者给出相同的输出。那为什么我不能像这样调用函数(比如有趣)并循环遍历数组:fun(a[0]);fun(int*p){cout 最佳答案 fun(a[0]);//thislooksOKvoidfun(int*p)//thisisOKifyouaddreturntype'^^^^{cout 关于c++-将二维数组作为参数传递,我们在StackOverflow上找到一个类似的问题:

c++ - if语句中的getline

根据我的阅读,在bool上下文中使用的getline()返回到void*的隐式转换。我在网络上的任何地方都没有找到对这一声明的任何真正引用。它到处都说隐式转换不存在,并且在bool上下文中指针应该是同类的(如果ptr==0比0转换为类型指针ptr).同样在标准中说在bool上下文中它被转换为未指定的bool类型。这到底是什么意思? 最佳答案 简而言之:这意味着您可以在if语句中使用getline(),如果有效,您将进入if语句block。在龙:getline()usedinaBooleancontextreturnsanimplic

c++ - 在用户插入数据之前创建结构对象时,Vector 返回乱码

我在练习使用指针时偶然发现了一些我不理解的东西。该程序执行以下操作:创建一个vector将vector的地址传递给函数那个函数有一个for循环在该for循环中,要求用户提供电影名称收到电影名称后,将创建一个新的电影对象(来自结构)为每部电影创建一个新的boost线程,传递用户制作的标题以及新电影对象和vector的指针。在boost线程中,电影对象的“title”变量被赋予用户制作的标题,然后电影被添加到vector中当所有线程都完成后,“main”函数内的for循环会显示vector中存储的所有电影标题。当我交换这两个时出现问题//Getinfoaboutnewmoviefromus

c++ - 我可以使用指针访问多维数组吗?

来自this引用,在C中似乎未定义以下行为。intmy_array[100][50];int*p=my_array[0];p[50];//UBC++03或C++11中是否有引用资料证实了这一点? 最佳答案 在+运算符的描述中是的。您不能在C中取消引用该指针,因为它是第一个子数组的结束指针。在C++中,这目前是合法的,因为指针指向一个有效的整数(指向关系的点在第3节的某处定义)。然而,在这两个标准中,添加超过50个会产生未定义的行为。最近向c++委员会发送了一份DR,内容涉及取消引用此类“凭空有效”指针可能会被取消引用的规则,因此我不

c++ - 适当使用 boost::shared_ptr?

关于boost::shared_ptr的问题:我有3个类(class)。A是某种负责管理一切的主类。B是一个类,它只具有完成某些工作的功能。Dispatcher只是一个围绕单独线程的类,它从B的Instaces中获取工作,在此线程中完成。所以它有点像这样工作:A有一个Dispatcher实例。现在,A偶尔会生成一个B的实例,并将其传递给调度程序。重要的是,B在完成后需要调用A::callback()。这就是为什么B在其构造函数中获取对A的引用(参见下面的代码)A.hppclassA:publicboost::enable_shared_from_this{public:A();void

c++ - 我应该如何构造相互依赖的C++成员?

我有一个使用库进行通信的类:classTopic{Topic(TypeT,Stringname);};classReader{Reader(Topic,Stringname);};classWriter{Writer(Topic,Stringname);};我想做一个这样的说话者类:Talker(TypeT,Stringname);并通过构造函数生成成员Writer和Reader。我在用指针做这件事之间左右为难:classTalker{Topic*m_Topic;Reader*m_Reader;Writer*m_Writer;Talker(TypeT,Stringname){m_Top