草庐IT

lldb_private

全部标签

删除说明符与私有(private)函数的 C++11 用法

我正在强化我的C++(例如,尝试进入更现代风格的编码)并且正在查看删除说明符。据我了解,它用于确保无法定义或调用某些功能。如果我理解正确的话,这主要是在赋值和复制的范围内。我不太确定使用delete说明符和仅将这些函数设为私有(private)之间有什么区别。例如,有什么区别:classFoo{private:Foo&operator(constFoo&);Foo(constFoo&);};和classBar{public:Bar&operator(constBar&)=delete;Bar(constBar&)=delete;};换句话说:使用delete说明符有什么好处?仅仅是为了

C++ 私有(private)继承和静态成员/类型

我试图阻止一个类将它的“this”指针转换成它的接口(interface)之一的指针。我通过中间代理类使用私有(private)继承来做到这一点。问题是我发现私有(private)继承使得层次结构中继承类下的所有类都无法访问基类的所有公共(public)静态成员和类型。classBase{public:enumEnum{value};};classMiddle:privateBase{};classChild:publicMiddle{public:voidMethod(){Base::Enume=Base::value;//doesn'tcompileBAD!Base*base=th

c# - 私有(private)在 C++ 和 C# 中意味着不同的东西吗?

我想知道为什么C#不允许privatevirtual函数并遇到恰当命名的WhyareprivatevirtualmethodsillegalinC#?在接受的答案中EricLippert(谁可能知道他在说什么……)说:Ifyoudesiretorestricttheabilitytooverridethemethodinnon-nestedderivedclassesthenyoucandosobyrestrictingtheabilityofnon-nestedclassestoderivefromthebaseclass;在C++中,private:virtual是有意义的,因为它

c++ - 允许构造函数调用私有(private)方法的默认参数

我有课classA{public:classKey{Key(){}Key(Keyconst&){}};A(Keykey,inta=5){}};Key的构造函数是私有(private)的,因此任何人都不能构造对象A。但是,使用以下代码:intmain(){Aa(A::Key());//thiscompiles!!!Aa2(A::Key(),5);//thisdoesn't//somehowdefaultingtheargumentcausestheprivateconstructor//tobeOK-noideawhyreturn0;}通过在我的构造函数中使用inta的默认参数,编译器愉

c++ - 单元测试资源管理类中的私有(private)方法 (C++)

我之前用另一个名字问过这个问题,但因为我没有很好地解释它而删除了它。假设我有一个管理文件的类。假设此类将文件视为具有特定文件格式,并包含对该文件执行操作的方法:classFoo{std::wstringfileName_;public:Foo(conststd::wstring&fileName):fileName_(fileName){//ConstructaFoohere.};intgetChecksum(){//Openthefileandreadsomepartofit//Longmethodtofigureoutwhatchecksumitis.//Returnthechec

c++ - 你为什么要将 operator `new` 设为私有(private)?

我正在使用OpenSpliceDDS,并且在那里,几乎所有C++类(我使用的基本类,如果重要的话我可以提及它们)都重载了new运算符以使其成为私有(private)的(以防止用户使用它们)。我不明白,为什么会有人这样做?有人可以提供一些例子来说明这样做的必要性吗?为什么我需要new:因为大多数这些类没有默认构造函数,我需要在稍后的实现中通过unique_ptr初始化它们。简单的技巧:另一方面......我可以很容易地欺骗这个!我可以用另一个类包装这个类,然后使用new所有我想要的,对吧?因此,我不明白动机,感觉风格很差。有人可以解释一下吗?编辑:澄清一下:提供一个无法转义的好例子是一个

c++ - 私有(private)方法作为尾随返回类型 (decltype)

当我尝试在私有(private)方法函数上使用decltype()时,我得到了私有(private)方法error:'m1'hasnotbeendeclaredinthisscope#includeclassC{public:C()=default;~C()=default;automasterMethod(intopMode)->decltype(m1()){switch(opMode){case1:returnm1();break;case2:returnm2();break;default:returnm1();break;}}private:intm1(){return1;}i

c++ - 翻译单位可以私有(private)类(class)吗?

考虑以下代码:/**myclass.h*/classmyclass_impl{//...}boost::shared_ptrmyclass;我能否以某种方式使myclass_impl(或至少直接使用它)对定义它的翻译单元私有(private),从而允许客户仅使用myclass类型定义?我想要实现的是让编译器在有人直接使用实现类时提醒我。 最佳答案 在源文件(不是头文件)中声明您的类,其他翻译单元将无法访问它。然后,使用前向声明在头文件中声明指针/引用。或者定义一个impl头文件,并注释掉它不应该包含在其他源文件中。/**myclas

c++ - 无法使 C++ 中的私有(private)方法返回指向私有(private)嵌套类的指针

这个不想编译:classMainClass{public:...private:classNestedClass{//Line39...};classNestedClass*getNestedClassFor(inti);};编译器说:error:'classMainClass::NestedClass'isprivate但是,如果我将NestedClass设置为public,它就会起作用。为什么不起作用?这不是好像我正在通过公共(public)方法导出嵌套类吗?它只是一个私有(private)方法,返回一个指向私有(private)类的指针。有什么想法吗?谢谢!更新修复了半列。他们不

涉及私有(private)继承的 C++ 编译器错误

有人可以向我解释以下编译器错误吗:structB{};templatestructA:privateT{};structC:publicA{C(A);//ERRORHERE};指定行的错误是:test.cpp:2:1:error:'structBB::B'isinaccessibletest.cpp:12:7:error:withinthiscontext究竟什么是不可访问的,为什么? 最佳答案 尝试A或A.内部C,对B的不合格引用将获取所谓的injected-class-name,它是通过基类引入的A.自A私有(private)继