我见过这样的代码,其中构造函数被声明为私有(private)的,而析构函数是公共(public)的。这样的声明有什么用?析构函数是否需要公开以便在继承期间可以进行调用,还是代码中的错误?这个问题的信息似乎有点少,但我真正想知道的是,当构造函数需要私有(private)时,是否有公共(public)析构函数遵守C++规则? 最佳答案 简答将构造函数创建为私有(private)但将析构函数创建为公共(public)有很多实际用途。您可以使用此范例来:强制引用计数(SeeHiteshVaghani'sexample).实现singleto
我刚才问了一个问题aboutaccessingtheunderlyingcontainerofSTLadapters.我得到了一个非常有帮助的答案:templateS&Container(priority_queue&q){structHackedQueue:privatepriority_queue{staticS&Container(priority_queue&q){returnq.*&HackedQueue::c;}};returnHackedQueue::Container(q);}intmain(){priority_queuepq;vector&tasks=Contain
我有一个resource_manager维护std::vector>的类在内部。resource_manager是resource的好友类.我要resources只能由resource_manager创建/删除,所以我将其构造函数设为私有(private)(可以正常工作)。但是,如果我将析构函数设为私有(private),则代码不会编译,因为析构函数由boost::shared_ptr调用,这不是resource的friend.我正在考虑通过只返回constresource*来强制执行“不要被客户删除”规则来自resource_manager,但不知何故我对这种方法提供的安全性不满意(
我最近从Java和Ruby切换回C++,令我惊讶的是,当我更改私有(private)方法的方法签名时,我不得不重新编译使用公共(public)接口(interface)的文件,因为私有(private)部分也在.h中文件。我很快想出了一个解决方案,我想这对Java程序员来说是典型的:接口(interface)(=纯虚拟基类)。例如:香蕉树.h:classBanana;classBananaTree{public:virtualBanana*getBanana(std::stringconst&name)=0;staticBananaTree*create(std::stringcons
我有一个包含std::list的类,我希望为const_iterator提供publicbegin()和end(),为普通迭代器提供privatebegin()和end()。但是,编译器看到私有(private)版本并提示它是私有(private)的,而不是使用公共(public)const版本。我知道C++不会重载返回类型(在本例中为const_iterator和迭代器),因此它选择了非常量版本,因为我的对象不是const。如果没有在调用begin()之前将我的对象转换为const或者没有重载名称begin是否有办法实现这一点?我认为这是一个已知的模式,人们以前已经解决过,并且想效仿
有人可以证明在Singleton类实现中私有(private)化赋值运算符的必要性吗?将Singleton&operator=(Singletonconst&);私有(private)化解决了什么问题?classSingleton{public:staticSingleton&Instance(){staticSingletontheSingleton;returntheSingleton;}private:Singleton();//ctorhiddenSingleton(Singletonconst&);//copyctorhiddenSingleton&operator=(Sin
ThePrincipleEngineer在我上一家公司有一条规则,privatestatic方法应该作为实现文件中的函数来实现,而不是类方法。我不记得他的规则是否有任何异常(exception)。我在目前的工作中偶然发现了这样做的动机:如果相关函数的参数或返回类型是需要在header中包含定义文件的对象,这可能会造成不必要的困难。em>这足以让我不再使用privatestatic方法,但在我注销它们之前我想知道是否有人知道他们的利基市场填写一个实现文件函数不会?编辑:此处的示例可能会有所帮助。假设这是classFoo声明的开始,它还有其他方法将在实现文件中调用voidfoo():cla
我有一个staticmap是一个private数据成员。如何在实现文件中对其进行初始化,使其初始容器为空?它不是const。开始时此容器中没有任何内容,这一点很重要。 最佳答案 标题:classXXX{private:staticstd::mapthe_map;//declaresstaticmember//...执行文件:std::mapXXX::the_map;//definesstaticmember这会将映射的构造函数调用插入到程序初始化代码中(并在清理中插入析构函数)。不过要小心-不同翻译单元之间的静态构造函数的顺序是未定
我正在实现一个多态类型(称之为A),我想通过std::shared_ptr专门管理它。为了允许在派生类的构造函数中使用shared_from_this,A使用new分配,然后初始化一个成员std::shared_ptr给自己自动管理它的生命周期。为了帮助实现这一点,我决定将类特定的operatornew设为私有(private),并计划使用create()辅助函数而不是new和make_shared。该设计可能看起来有点滑稽,但在我正在处理的UI库的上下文中是有意义的。一个最小的可重现示例如下:structA{A():m_sharedthis(this){}voiddestroy(){
我想访问类中的私有(private)数据成员。类中没有访问私有(private)数据成员的成员函数。这是私有(private)的。我想上课,想知道如何打开它。一种方法是复制类的声明,将私有(private)成员设为公有并将新类称为something_else。然后我重新解释转换并复制原始对象。这行得通。但我想要更优雅的东西……或者可能是通用的……或者只是另一种方式。有哪些选择?我可以使用void*吗?我可以将类(class)memcpy到另一个空类(class)吗?有什么方法可以做到这一点?% 最佳答案 我假设您已经经历了“打破封装