草庐IT

c++ - 为什么通过公开继承另一个类来构建一个类是一种糟糕的做法?

我正在为我的OOP期末学习,遇到了一个让我有点难过的问题。问题是“解释为什么通过公开继承List类来构建Stack类是一种糟糕的方法。描述一个更好的解决方案。”我不确定我的回答是否正确,但是否因为“公开继承...”?并且最好改为私有(private)继承,这样除了Stack之外没有其他类知道继承? 最佳答案 如果派生类公开继承自基类,则派生类是基类的一个实例,可能具有一些额外的功能或重写的功能。在堆栈和列表的情况下,堆栈不是列表-它在逻辑上不执行列表操作,如搜索、连接、反转等-因此从列表继承不是一个好主意。您可以在这里使用私有(pr

c++ - 指向 std::thread 的共享指针是一种不好的做法吗?

使用std::shared_ptr有意义吗?逻辑很简单:如果不需要线程,则删除它,如果需要新线程-重新分配它。有什么方法可以将这个概念与线程池进行比较吗?我确实知道我系统中线程的确切数量(我开发了图像处理算法,我想给“算法”类的每个子级一个单独的线程(也许让它私有(private),然后不需要shared_ptr),该算法将在何处运行,如果未提供图像,则将此私有(private)线程闲置。这是一个糟糕的概念吗? 最佳答案 您可能错过了事实std::thread析构函数不会终止线程。正如评论中已经提到的,ifdetachorjoinw

c++ - 尝试以任何方式删除所有编译器警告是最佳做法吗

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我们的项目经理最近制定了一项政策,要求开发人员删除所有编译器警告。我知道有些警告确实很容易删除,有些则不那么容易。所以一些开发人员使用各种可能的方法来达到目的。例如,使用显式转换将double转换为float,将float转换为int,将signed转换为unsigned等等。由于我们的代码库如此之大,30-50名开发人员20多年的工作,我真的怀疑这种努力

c++ - 从实现中抽象出库依赖是一种常见的做法吗?

我对这个问题的回答是“否”。但我的同事不同意。我们正在重建我们的产品,并在近期内做出许多关键决策。在做我自己的一些工作时,我注意到我们有一些内部C++类来抽象一些POSIXAPI(线程、互斥量、信号量和rw锁)和其他实用程序类。请注意,这些类是基本类,尚未从Linux移植(可移植性是重建的一个因素。)我们还使用POCOC++库。我将此事提请我的同事注意,并建议我们放弃内部类(class),转而使用POCO类(class)。我想充分利用我们已经在使用的库。他们建议我们应该使用POCO实现我们的内部类,并在必要时进一步抽象额外的POCO类,以免依赖于任何特定的C++库(引用future的未

c++ - move 左值引用参数是不好的做法吗?

我最初认为move左值引用参数是不好的做法。C++开发人员社区确实普遍认同这一点吗?当我调用一个具有R值引用参数的函数时,很明显我必须期望可以move传递的对象。对于具有L值引用参数的函数,这并不是那么明显(在C++11引入move语义之前,这根本不可能)。但是,我最近采访过的其他一些开发人员不同意应避免move左值引用。是否有强有力的论据反对它?还是我的意见有误?由于我被要求提供一个代码示例,这里有一个(见下文)。这是一个仅用于演示问题的人为示例。很明显,在调用modifyCounter2()之后,再调用getValue()会导致segmentationfault。但是,如果我是ge

c++ - 不提供显式析构函数是不是不好的做法?

如果我没有为C++类提供显式析构函数,因为我确信编译器提供的默认析构函数是我的类所需的全部,这样可以吗?或者这被认为是不好的做法? 最佳答案 提供显式析构函数的主要优点是您可以轻松地将断点放入其中进行调试。有些人喜欢这样,因此更愿意为每个类提供一个显式析构函数。但是,如果类足够简单以至于默认构造函数显然就足够了,那么省略它是完全可以的。另请注意,添加析构函数确实有其缺点:除了代码中的额外噪音外,添加析构函数可能会阻止您的类成为POD。.因此,您仍应避免在整个代码中漫不经心地散布琐碎的析构函数。我认为省略一个空的非虚拟析构函数是有害的

c++ - gcc-8 -Wstringop-truncation 什么是好的做法?

GCC8添加了一个-Wstringop-truncation警告。来自https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82944:The-Wstringop-truncationwarningaddedinGCC8.0viar254630forbug81117isspecificallyintendedtohighlightlikelyunintendedusesofthestrncpyfunctionthattruncatetheterminatingNULcharcterfromthesourcestring.Anexampleofsuch

c++ - 让宏定义为函数返回一个值是不好的做法吗?

使用定义为有条件地返回值的宏有一个缺点,即仅查看客户端代码可能会在宏点退出时并不明显。我正在考虑的用例是编写值和错误检查,如下所示:#defineWRITE_CHK(file,param)\if(!write_that_returns_zero_on_fail(file,param)){\handle_error();\returnfalse;\}客户端代码:boolmyfunc(){...WRITE_CHK(file,param)//functionmightreturnhere...returntrue;}我很好奇宏(将在我的代码中的许多地方使用)的好处是否会超过上述缺点。除了简单

ios - 手动实例化 ViewController 并推到顶部。好的做法?

我正在做的是:UIViewController*rootController=[[[UIApplicationsharedApplication]keyWindow]rootViewController];AlarmRingViewController*alarmController=[[AlarmRingViewControlleralloc]init];[rootControllerpresentViewController:alarmControlleranimated:YES];我想要实现的目标是将我的AlarmRingViewController推到目前正在显示的任何其他Co

iphone - iPhone5 发布后为通用应用程序创建 Xib 文件时应遵循的常见做法

我之前在为通用应用程序创建XIB文件时遵循的常见做法如下:我为iPhone和iPad创建了Xib文件。将它们命名为XibFile.xib和XibFile~ipad.xib。对于iPhone4/4s和iPad3,我在需要的地方使用了视网膜图像。所以这涵盖了我所有的UI设计。我的客户也需要信箱模式下的iPhone5屏幕。我没有使用Default-568h@2x.png。所以我的生活很顺利。但是现在,当Apple决定从5月1日起停止支持Letterbox模式时(readthisarticle),我还需要为iphone5屏幕更改Xib级别。所以现在我在Xib文件中使用了自动调整大小,并为我的所