草庐IT

C++ - 为数组分配内存的安全性,然后返回要在外部删除的指针

我目前正在学习C++,但有些事情我不清楚。如果我创建一个函数,为某种类型的数组分配内存,然后返回新创建的指针,假定该指针只是一个内存地址,相应的delete语句是否会清理所有分配的内存都正确,还是只会释放第一个元素,从而导致数组其余部分发生内存泄漏?如果它被正确清除,那么C++如何知道要释放什么,因为我假定返回类型中固有的上下文丢失?int*AllocateSomething(){int*arr=newint[100];//fillthearraywithsomething...returnarr;}intmain(){int*p=AllocateSomething();deletep

c++ - 为什么要在构造函数上使用 constexpr?

我知道constexpr允许您在编译时将对象用作常量,但是什么时候这会有益呢?我试图更好地理解关键字,但我找不到一个很好的例子来解释为什么需要它的构造函数。下面的两个例子都有效,那么为什么要将constexpr放在构造函数上呢?在构造函数上使用constexpr:#includeusingnamespacestd;classRect{public:constexprRect(intwidth,intheight):mWidth(width),mHeight(height){}constexprintgetArea()const{returnmWidth*mHeight;}private

c++ - 如何让 CMake 在构建之前运行 python 脚本,以便为我的项目生成要在构建中使用的文件?

我有一个python脚本,它解析项目目录中的所有C++源文件,在文件中查找一些内容,然后生成一个文件。这个python脚本工作正常,但我希望它在构建我的C++项目之前自动运行。所以基本上,我希望这个python脚本在每次构建之前运行,所以如果任何.h或.cpp文件已被更改。如果python脚本本身已被更改,我也希望它运行。我有问题中的python脚本,genenums.py,与我的C++源文件(例如main.cpp等)位于同一目录中。我已经尝试根据文档尝试使用add_custom_command,但我无法让cmake在任何情况下运行此python脚本。我不确定如何使这项工作正常进行,因

c# - 为什么要在 char 上使用定界符?基于c的

前几天我在用C#编写一些代码,这让我开始思考。如果char文字只能有1个字符(或定界字符),那么为什么我们需要结束定界符?比如目前我们需要这样写:charcharacter='s';而且在任何情况下(显然)这都行不通:charcharacter='sa';那为什么我们要结束'而不是暗示呢?例如:charcharacter='s;charanotherCharacter='\';可读性只会受到影响,因为我们已经习惯了当前的标准(不一定是因为这种方式的可读性较差)。 最佳答案 这是约定在这个unicode世界中,字符不一定表示为一个字符

c++ - 与 Travis 一起使用 bii 时要在 gitignore 中放些什么

我正在尝试使用Travis和bii设置CI。有documentationavailableonthebiicodewebsite包括一个与发布block相关的示例ignore.bii文件。任何人都可以提供一个示例,说明在持续集成设置中我应该在我的.gitignore中忽略哪些bii特定文件和文件夹吗? 最佳答案 这取决于在init时定义的biicode项目布局。如果你使用“简单”布局($biiinit-L),那么你应该gitignore:bii/bin/bii包含cmake、build、deps子文件夹,都可以忽略bin包含输出二进

c++ - 要在我的 C++ 程序中使用 C 代码,我需要做什么特别的事情吗?

注意:我使用g++4.3.4版来编译我的C++代码。到目前为止,每当我想在我的代码中使用C风格的语言元素时,我似乎都可以将C的东西混合在我的C++中并与我的C++一起包含。我知道C++大部分向后兼容C...所以我想我的问题是这些:C的哪些部分与C++不向前兼容?如果我继续天真地将C的东西插入我的C++代码中,专业程序员会mock我吗?在同一个.cpp文件中包含C和C++代码的正确方法是什么?我可以继续使用g++来编译我的混合代码吗?对于这个问题,我主要关注处理单个.cpp文件和单个g++命令来编译它的解决方案。在这一点上,我真的不关心链接内容。 最佳答案

c++ - 是否有必要在 Qt 中删除对话框窗口指针?

我使用这段代码:MyDialog*md=newMyDialog();md->show();在Qt中打开一个对话窗口。md会在对话窗口关闭时自动删除,还是我需要在窗口结束时运行deletemd? 最佳答案 在你的小代码中你需要删除它,因为它没有父级,如果你设置父级,父级将删除它的子级,你只需要删除“主窗口”(没有父级的窗口)。对于QWidget派生类,您还可以使用:Qt::WA_DeleteOnClose标志,然后当小部件关闭时内存将被释放,请参阅文档here那么代码就会变成:MyDialog*md=newMyDialog();md-

c++ - 为什么要在 C++ 中为单例类重载复制赋值运算符?

我知道为什么要使默认构造函数和复制构造函数私有(private)以在C++中实现单例类。但我不明白的是,为什么要将复制赋值运算符设为私有(private),因为不会有两个现有对象开始。我的探索带来了两点:根据Alexandrescu在“现代C++设计”中的说法,赋值运营商将被私有(private)化以防止self分配。其次,根据ruleofthree,如果你定义了一个构造函数,一个类的复制构造函数和赋值运算符,你应该定义明确地所有三个。那么,是否需要遵守这条规则仅。那么,您对此有何看法? 最佳答案 我认为,禁止赋值更多是出于语义上的

c++ - 为什么要在这个 return 语句中使用这个逗号?

这个问题在这里已经有了答案:Whatdoesthecommaoperator,do?(8个答案)C++--returnx,y;Whatisthepoint?(18个答案)关闭6年前。我明白这个C++函数是做什么的,但是我不明白为什么return语句是这样写的:intintDivide(intnum,intdenom){returnassert(denom!=0),num/denom;}这里只有一个语句,因为只有一个;但逗号让我很困惑。为什么不写:intintDivide(intnum,intdenom){assert(denom!=0);returnnum/denom;}除了“优雅”之

c++ - 是否有必要在 Windows 注册表中转义字符串中的斜杠?

这是一个主要与WinAPIRegSetValueEx有关的问题。如果您查看它在MSDN中的描述here你会发现:lpData[in]Thedatatobestored.REG_SZ,thestringmustbenull-terminated.WiththeREG_MULTI_SZdatatype,thestringmustbeterminatedwithtwonullcharacters.Abackslashmustbeprecededbyanotherbackslashasanescapecharacter.Forexample,specify"C:\\mydir\\myfile"