草庐IT

protected-resource

全部标签

C++:可以继承类及其 protected 成员类型吗?

以下代码是否符合C++标准?structB{protected:structType{};};structD:B,B::Type{};intmain(){Dd;return0;}我试过CompilerExplorer.MSVC(VS2017RTW)接受它。gcc(7.3)和clang(6.0.0)拒绝它。 最佳答案 代码符合标准,从C++11开始,但不在C++03中。C++11到C++17在[class.access]部分的介绍中这样说,成员访问控制:Allaccesscontrolsinclause[class.access]af

c++ - 为什么我不能从派生类的实例访问 protected 成员?

我已经有一段时间没学过C++了,不明白为什么以下方法不起作用:classA{protected:intnum;};classB:publicA{};main(){B*bclass=newB();bclass->num=1;}编译生成:errorC2248:'A::num':cannotaccessprotectedmemberdeclaredinclass'A'派生类不应该访问protected成员吗?我错过了什么? 最佳答案 是的,派生类可以访问protected成员,但您在main()函数中访问它,该函数位于层次结构之外。如果你

c++ - C++中 union 中的 'protected'有什么意义

protected成员或函数有什么用处?您不能从union继承,因此没有子节点可以访问它。它是提供功能用途还是仅仅因为移除它很麻烦而存在? 最佳答案 union中的protected变得完全等同于private,但这种允许不会造成任何损害并避免额外的特殊情况处理和额外的差异union和struct/class(在标准中一起描述)。老实说,我认为可以在union中使用protected只是为了不将第umteenth特殊情况添加到标准中;也许标准委员会甚至没有想到要区分这种行为,因为这是一个非常奇怪的极端情况,但按照目前的规定并没有什么

c++ - 为什么 GoF 建议在 C++ 模板方法模式实现中使用 protected (而不是私有(private))虚拟方法?

来自四人组的模板方法模式:Threeimplementationissuesareworthnoting:UsingC++accesscontrol.InC++,theprimitiveoperationsthatatemplatemethodcallscanbedeclaredprotectedmembers.Thisensuresthattheyareonlycalledbythetemplatemethod.Primitiveoperationsthatmustbeoverriddenaredeclaredpurevirtual.Thetemplatemethoditselfsh

c++ - union 内的 'protected' 关键字有什么用?

这个问题在这里已经有了答案:Whatisthepointof'protected'inaunioninC++(1个回答)关闭7年前。我检查了protected访问说明符可以在class、struct以及union中使用。我知道protected访问说明符意味着成员将是私有(private)的,但对派生类可见。我无法想到一个合理的用例,其中union内的protected关键字会很有用,因为union不能成为继承层次结构的一部分。既然在union中private和protected没有区别,为什么还要在union中允许protected呢? 最佳答案

c++ - `memory_resource` 的用途和用途是什么?

标准C++17包含一个新的命名空间pmr,其中包括一组以memory_resource的名称分组的类。在网上搜了一下,发现很少有关于它的低俗信息,直接结果就是这个问题:pmr,尤其是pmr::memory_resource背后的主要思想是什么?把问题详细一点,我脑子里的一些问号是:它带来了什么新的东西,或者它解决了哪些限制?与allocator有什么区别?多态是否意味着可以选择运行时提供给容器构造函数的allocator?(例如用于测试目的)它对实现内存池或其他内存管理方案有帮助吗?上下文:为了创建memorypool分配器,我找到了有关此命名空间的信息。阅读像pool_options

c++ - 嵌套类 : Access to protected member of enclosing class from a nested protected class

此代码在msvc/g++上编译:classA{protected:inti;classB{public:A*a;B(A*a_):a(a_){}voiddoSomething(){if(a)a->i=0;//如您所见,B可以访问封闭类的“protected”部分,尽管它没有被声明为友元。这是一种标准(符合标准的)行为吗?我有时会使用此功能,但我不记得有一条规则说嵌套的protected类应该自动访问封闭类的所有protected数据。 最佳答案 在C++03标准中,11.8p1说:Themembersofanestedclasshav

c++ - 终止 protected 防病毒进程

我正在使用ESet防病毒软件,最近它的GUI前端egui.exe挂起,占用了50%的CPU(即一个内核的100%)。令人惊讶的是,我发现我无法杀死它,即使启用了调试权限。现在我很好奇:他们是如何实现这样的防御的,有没有办法在不写内核驱动的情况下杀死它?egui.exe进程在普通用户(非管理员)下运行,我尝试使用管理帐户以各种方式杀死它。这是我尝试过的。你不能从任务管理器中杀死它你无法使用pskill杀死它您不能使用进程资源管理器将其杀死,也不能将调试器附加到它然后我开始了一些编程,发现:在非特权用户下,您可以使用PROSESS_TERMINATE访问权限打开它,但对TerminateP

c++ - g++编译错误 "... is protected from within this context",而clang没有错误

我有以下代码:#includeclassBaseClass{protected:staticintx;};intBaseClass::x;classDerivedA:publicBaseClass{public:DerivedA(){x=3;}};classDerivedB:publicBaseClass{public:DerivedB(){std::cout使用g++编译(g++classtest.cpp)我收到以下错误:classtest.cpp:Inconstructor‘DerivedB::DerivedB()’:classtest.cpp:9:5:error:‘intBase

c++ - 有效 C++ : discouraging protected inheritance?

我正在阅读ScottMeyers的EffectiveC++(第三版),并在第32项:确保公共(public)继承是页面上的“is-a”中的一段中151他发表评论(我用粗体表示):Thisistrueonlyforpublicinheritance.C++willbehaveasI'vedescribedonlyifStudentispubliclyderivedfromPerson.Privateinheritancemeanssomethingentirelydifferent(seeItem39),andprotectedinheritanceissomethingwhosemea