草庐IT

private-inheritance

全部标签

c++ - 为什么 == 重载可以访问参数的私有(private)成员

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:whyprivatevalueoftheobjcanbechangedbyclassinstance?考虑以下(部分)代码:classGroup{private:intid;public:voidset_id(int);intget_id();booloperator==(constGroup&);};boolGroup::operator==(constGroup&g){if(g.id==this->id){/*idisprivate?*/returntrue;}returnfalse;}代码编译并且结果似

c++ - 指向不可访问基中的成员函数的指针

下一个例子的编译:classA{public:voidfoo(){}};classB:privateA{public:usingA::foo;};intmain(){typedefvoid(B::*mf)();mffunc=&B::foo;Bb;(b.*func)();}失败并出现下一个错误:main.cpp||Infunction‘intmain()’:main.cpp|18|error:‘A’isaninaccessiblebaseof‘B’main.cpp|18|error:inpointertomemberfunctionconversion我知道A不是B的可访问基,但我正在使

c++ - 为什么不使用私有(private)基地的类型转换运营商?

在此代码中,分配给b1有效,但它不允许分配给b2(有或没有静态转换)。我实际上是在尝试解决相反的问题,公共(public)继承但不隐式转换为基础。但是,似乎从未使用过cast运算符。这是为什么?structB{};structD1:privateB{operatorB&(){return*this;}B&getB(){return*this;}};structD2:publicB{explicitoperatorB&(){return*this;}};structD3:publicB{operatorB&()=delete;};voidfunB(B&b){}intmain(){D1d1

c++ - 在哪里定义结构只用作私有(private)成员变量?

以下面的头文件为例,其中Bar是一个结构体:classFoo{...private:Bar_bar;};我只希望Bar可以作为Foo的私有(private)成员变量访问。声明和定义Bar的正确方法是什么?选项1:在header中定义?我想避免这种情况,因为我不希望Bar在Foo类范围之外可用。structBar{inta;intb;...};classFoo{...private:Bar_bar;};方案二:在header中前向声明,在cpp中定义?不确定这是否合法,因为如果Bar的定义不直接可用,编译器将如何从header中严格地知道Foo的大小?此外,这是否会从包含标题的其他文件中

c++ - 嵌套类对封闭类私有(private)数据成员的访问

我在实现一个嵌套类时遇到问题,该类的构造函数是用一些封闭类的私有(private)数据成员初始化的。例子:HeaderFile:classEnclosing{//...Publicmembers//...Privatemembersintx,intyclassInner;//Declarationfornestedclass};Impl.File://Stuff...classEnclosing::Inner{explicitInner():foo(x),bar(y)//fooandbararedatamembersofInner//...};我收到一个非静态数据成员的无效使用错误。当

windows - 为什么windows允许创建私有(private)堆?

我正在学习Windows中的内存管理。我知道Windows中的进程默认有它的堆,将来可以扩展。进程也可以创建额外的(私有(private))堆。为什么windows允许创建私有(private)堆?这种方法有什么好处?据我了解,使用默认堆(可能重新分配)就足够了。还是另一种优化重新分配的方法? 最佳答案 如果你看HeapCreate你会看到它有多个选项可以改变堆的工作方式。HEAP_NO_SERIALIZE会使其更快,但您必须自己处理线程同步等。如果您分配具有不同生命周期的不同大小的对象,那么拥有多个堆也是有益的。如果作为工作的一部

windows - 私有(private)字节的 win32 API 函数是什么?

私有(private)字节的win32API函数是什么(您可以在perfmon中看到的)。我想避免使用.NETAPI 最佳答案 BOOLWINAPIGetProcessMemoryInfo(__inHANDLEProcess,__outPPROCESS_MEMORY_COUNTERSppsmemCounters,__inDWORDcb);其中ppsmemCounters参数可以是PROCESS_MEMORY_COUNTERS或PROCESS_MEMORY_COUNTERS_EX结构。只需将PROCESS_MEMORY_COUNTER

c++ - 强制访问私有(private)成员

这个问题在这里已经有了答案:Accessingprivatemembers[closed](12个答案)关闭3年前。假设我正在使用一个不知道自己在做什么的人的开源库。(重要成员不封装)真的是同事的代码我不让修改,他也不愿意帮我修改。如何在不重写伪类或修改原始类的情况下强制访问私有(private)成员?我试过类似#defineprivatepublic的东西,但是类文件包含一些标准命名空间文件,这会产生编译错误。我试过内存操作,但这需要成员身份识别,这是行不通的。(见下文)#definePX_ACCESS_PRIVATE(pObject,_Member)(static_cast(pOb

windows - : "A child-process can inherit the handle"?是什么意思

根据SDK,有一些Win32对象可以“继承”给给定进程创建的子进程。(事件、互斥锁、管道……)这到底是什么意思?假设我有一个命名事件对象,使用CreateEvent创建,一次使用bInheritHandle==true,另一次使用==false.现在我启动一个子进程。这两个事件句柄如何影响子进程?它们在哪些情况下有所不同? 最佳答案 如果您创建/打开一个对象并允许继承该句柄,则允许继承句柄的子进程(例如,您可以为CreateProcess指定bInheritHandles=TRUE)将拥有这些句柄的副本.这些继承的句柄将具有与父句柄

laravel - 我正在使用带有 redis 和 socket.io 的 laravel echo。存在和私有(private) channel 失败

我正在使用带有redis和socket.io的laravelecho。存在和私有(private)channel失败我正在为我的服务器使用这个包laravel-echo-server当我使用公共(public)channel时一切正常,但是当我使用私有(private)channel时,在laravel-echo-server中记录了以下错误Clientcannotbeauthenticated,gotHTTPstatus503⚠[7:16:00PM]-155BcZ4cC_ieweeWAAADcouldnotbeauthenticatedtopresence-chat-messageE