草庐IT

default-public

全部标签

c++ - 当构造函数是私有(private)的时使用公共(public)析构函数

我见过这样的代码,其中构造函数被声明为私有(private)的,而析构函数是公共(public)的。这样的声明有什么用?析构函数是否需要公开以便在继承期间可以进行调用,还是代码中的错误?这个问题的信息似乎有点少,但我真正想知道的是,当构造函数需要私有(private)时,是否有公共(public)析构函数遵守C++规则? 最佳答案 简答将构造函数创建为私有(private)但将析构函数创建为公共(public)有很多实际用途。您可以使用此范例来:强制引用计数(SeeHiteshVaghani'sexample).实现singleto

c++ - 为什么 "default"是复制/移动构造函数或析构函数?

C++0x允许您将某些函数指定为默认函数:structA{A()=default;//defaultctorA(Aconst&)=default;//copyctorA(A&&)=default;//movectorA(Other);//otherctor~A()=default;//dtorA&operator=(Aconst&)=default;//copyassignmentA&operator=(A&&)=default;//moveassignment};这些函数的实现与编译器生成它们一样,在您不声明自己的大多数情况下通常会发生这种情况。如果您声明任何构造函数(上述任何其他构

c++ - 如何为 STL 类容器提供公共(public) const 迭代器和私有(private)非 const 迭代器?

我有一个包含std::list的类,我希望为const_iterator提供publicbegin()和end(),为普通迭代器提供privatebegin()和end()。但是,编译器看到私有(private)版本并提示它是私有(private)的,而不是使用公共(public)const版本。我知道C++不会重载返回类型(在本例中为const_iterator和迭代器),因此它选择了非常量版本,因为我的对象不是const。如果没有在调用begin()之前将我的对象转换为const或者没有重载名称begin是否有办法实现这一点?我认为这是一个已知的模式,人们以前已经解决过,并且想效仿

c++ - 为什么基指针只能在公共(public)继承下指向派生对象?

我认为这是因为基类数据成员和方法将无法访问,但我想更清楚地了解这一点。另外,这是否就是多态性(使用虚函数)只有在公共(public)继承下才有可能的原因? 最佳答案 实际上,即使基类是私有(private)的,指向基类的指针也可以指向派生类。问题是这样的转换在课外是不可能的。但是,仍然可以在可访问基础的上下文中执行此类转换。例子:#includeusingnamespacestd;structBase{voidfoo()const{coutfoo();}LiveexampleLiveexamplewithvirtualcall

c++ - 非公共(public) C++ 继承在实践中的使用频率是多少?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:WhenshouldIuseC++privateinheritance?我想创建这个社区维基,但没有看到按钮...有人可以添加吗?我想不出我以非公开方式从类派生的任何情况,而且我不记得副手看到过这样做的代码。我想听听它有用的真实示例和模式。

guava - 在 Kotlin 中,如何委托(delegate)给一个接口(interface)并只提供一个无参数的公共(public)构造函数?

问题源于Kotlinclassdelegation只允许委托(delegate)给构造函数参数,因此似乎迫使您为构造函数提供参数。下面是我关于这个问题的具体用例的原始问题。我想做以下事情:valmyTable1:MyTable=MyTable()在哪里MyTable继承自ImmutableTable(src)或至少Table而且我不必手动将所有Table方法委托(delegate)给某个基本实现。我还想避免以下情况:valmyTable2:MyTable=MyTable.build()即我不想被迫使用伴随对象/静态工厂方法。我试图扩展ImmutableTable,但我得到这个类型有一个

guava - 在 Kotlin 中,如何委托(delegate)给一个接口(interface)并只提供一个无参数的公共(public)构造函数?

问题源于Kotlinclassdelegation只允许委托(delegate)给构造函数参数,因此似乎迫使您为构造函数提供参数。下面是我关于这个问题的具体用例的原始问题。我想做以下事情:valmyTable1:MyTable=MyTable()在哪里MyTable继承自ImmutableTable(src)或至少Table而且我不必手动将所有Table方法委托(delegate)给某个基本实现。我还想避免以下情况:valmyTable2:MyTable=MyTable.build()即我不想被迫使用伴随对象/静态工厂方法。我试图扩展ImmutableTable,但我得到这个类型有一个

c++ - “Default member initializer needed within definition of enclosing class outside of member functions” - 我的代码格式不正确吗?

structfoo{structbar{~bar(){}//noerrorw/othisline};bar*data=nullptr;//noerrorw/othislinefoo()noexcept=default;//noerrorw/othisline};是的,我知道,还有一个题目完全相同,但有点不同的问题(涉及noexceptoperator和没有嵌套类型)。那里建议的解决方案(将foo的构造函数替换为foo()noexcept{})改变了语义,这里没有必要:这里我们有一个更好的答案(因此问题不是重复的)。编译器:AppleLLVM版本9.0.0(clang-900.0.37)

github报错Key is invalid. You must supply a key in OpenSSH public key format

原因:由于github官方提示普通类型的ssh不安全,所以改成OpenSSH解决办法第一步:打开终端。粘贴下面的文本,替换为您的GitHub电子邮件地址。连续按回车键ssh-keygen-ted25519-C"your_email@example.com"第二步:将SSH密钥添加到ssh-agent在后台启动ssh-agent。eval"$(ssh-agent-s)"在你的~/.ssh/目录创建config文件touchconfig在config中添加内容1#---localhostGenerated---#设置你自己的github账户名称HostzhrgithubHostNamegithub

c++ - std::is_default_constructible<T> 错误,如果构造函数是私有(private)的

我有以下片段#include#includeclassC{C(){}};intmain(){static_assert(!boost::has_trivial_default_constructor::value,"Constructible");static_assert(!std::is_default_constructible::value,"Constructible");}条件不相等,但第一个条件工作正常,第二个构造给出错误,构造函数是私有(private)的。编译器gcc4.7...那么,这是gcc错误,还是由标准定义的?http://liveworkspace.org/