草庐IT

Pointers

全部标签

c++ - 两个类之间的循环引用

我知道这一定是一个n00b问题,但我必须实现一个模型客户端-服务器顺序交互应用程序,并且由于客户端-服务器调用的次数不同,我不能只在外部函数中迭代步骤,总是获取来自客户端的数据,然后将其转发到服务器,反之亦然,所以我需要让我的Server和Client类相互了解,以便它们可以调用他们之间的公共(public)方法。一种方法是将两者都设计为单例,但我希望以一种更简单的方式来实现,更准确地说是使用循环引用:客户端存储对服务器的引用,服务器存储对客户端的引用。我知道这可能不是一个好方法,它可能会导致调用堆栈爆炸whenitbecomestoodeep,所以欢迎对我的设计进行任何改进。为了实现

c++ - char* 到 const wchar_t * 转换

我需要将字符指针转换为w_char*以便使用ParseNetworkString()。我已经尝试自己寻找解决方案,虽然我找到了一种解决方案,但有一个问题阻止我使用它:b1naryatr0phy在另一个帖子中说:std::wstringname(L"SteveNash");constwchar_t*szName=name.c_str();这几乎对我有用,除了我不能直接传递字符串,因为它的值并不总是相同,这意味着我不能只把它放在引号中。如果我用函数调用替换参数,那么第一行会给我一个错误(例如:std::wstringname(LgetIpAddress());我试过std::wstring

C++ 开关与成员函数指针与虚拟继承

我正在尝试分析实现多态性的各种方法之间的权衡。我需要一个在成员函数上有一些相似之处和一些不同之处的对象列表。我看到的选项如下:在每个对象中都有一个标志,在每个函数中都有一个switch语句。标志的值将每个对象指向其特定的部分每个功能。在对象中有一个成员函数指针数组,它们是施工时分配。然后,我调用该函数指针获取正确的成员函数。有一个带有几个派生类的虚拟基类。一这样做的缺点是我的列表现在必须包含指针,而不是对象本身。我的理解是,从选项3中的列表中查找指针将比选项2中的成员函数查找花费更长的时间,因为保证了成员函数的接近度。这些选项有哪些优点/缺点?我的首要任务是性能而不是可读性。多态还有其

c++ - 在 C++11 中使用不带托管共享指针的 shared_from_this()

假设我有一个类是enable_shared_from_this的子类。这个基类的文档说在调用shared_from_this之前应该有一个拥有这个类的共享指针。使用new分配类并调用shared_from_this来管理对象是否安全? 最佳答案 正如其他用户已经提到的,在不属于shared_ptr的实例上调用shared_from_this将导致未定义的行为(通常是异常,但也有没有保证)。那么,为什么还要一个答案呢?因为我自己做了一次同样的问题并得到了几乎相同的答案,然后我开始为另一个问题而苦苦挣扎,这个问题紧随其后-我如何保证所有

c++ - 从基类的指针访问派生类的成员

我有一个从另一个派生的类,我使用一个基类指针数组来保存派生类的实例,但是因为数组是基类的,所以我无法使用指针访问属于派生类的成员符号,我是否可以使用简单的命令访问这些成员,或者我是否应该重写我的基类以定义成员并仅在派生类中使用它?例子:classA{public:intfoo;};classB:publicA{public:charbar;};classC:publicA{inttea;};intmain(){A*arr[5];arr[0]=newB;chartest=arr[0]->bar;//visualstudiohighlightsthiswithanerror"classAh

c++ - boost 侵入式指针

我对boost的侵入式指针有点困惑。定义说:"Everynewintrusive_ptrinstanceincrementsthereferencecountbyusinganunqualifiedcalltothefunctionintrusive_ptr_add_ref,passingitthepointerasanargument.Similarly,whenanintrusive_ptrisdestroyed,itcallsintrusive_ptr_release;thisfunctionisresponsiblefordestroyingtheobjectwhenitsre

c++ - 引用 static_cast 的引用和指向 static_cast 指针的指针的成本

对引用static_cast的引用是否与指向指针static_cast的指针具有相同的运行时间成本?例如classB;classA:publicclassB;Aobj;A&ref=obj;A*ptr=&obj;//1static_cast(ref);//2static_cast(ptr); 最佳答案 不,它们并不总是具有相同的成本。启用优化后,它们总是具有相同或非常接近相同的成本。如果您向上或向下转换继承层次结构,其中任何一个涉及多重继承,或者一个多态类继承自一个非多态类,然后指针的static_cast可能会产生condition

带指针参数的 C++ 函数

我正在编写一个C++程序,将数据输出到一个文件,生成一个python脚本并调用pyplot进行绘图。但是,当我用指针传递参数时,它可以正常编译,但不能运行。它返回错误。当我使用XcodeDebug模式并逐步执行它时,它偶尔会给出正确的结果,但并非总是如此。有时它也会返回错误。我怀疑这可能是由某些内存分配问题引起的,但我无法确定到底是什么问题。我的代码如下:1)主要#include#include#include#include"PyCPlot.h"usingnamespacestd;doublepi=3.1415926;intmain(intargc,constchar*argv[])

c++ - 如何确定平台上的最大指针大小?

在(C和)C++中,指向不同类型的指针don'tnecessarilyhavethesamesize.我本来希望void*一定是最大的,但似乎连这实际上都不能保证。我的问题:如何确定我的(编译目标)平台上指针的最大大小是多少?注意:我的意思是任何指针,包括指向类成员函数的指针;您可以通过&获得的东西运算符(operator)。我不是指“通俗地”称为指针的实体,即不是unique_ptr的或shared_ptr之类的。 最佳答案 有3种不同类型的指针,它们可以有不同的大小:指向对象的指针函数指针成员函数指针一个void*根据C++17

c++ - 是否可以在 C++ 中创建方法调用调度程序?

考虑以下代码:structX{voidMethodX(){...}};structY{voidMethodY(){...}};voidtest(){Xx;Yy;Dispatcherd;d.Register("x",x,&X::MethodX);d.Register("y",y,&Y::MethodY);d.Call("x");d.Call("y");}问题是如何实现Dispatcher。我不介意X和Y可能继承自某些东西,但Dispatcher应该允许更多的客户(不仅是X和Y)。如果可能的话,我想避免使用void*指针:) 最佳答案