这已成为困扰我多年的事情.
我们都在学校(至少,我是)教过你必须释放每个分配的指针.不过,我有点好奇,关于不释放内存的实际成本.在一些明显的情况下,就像在malloc循环内部或线程执行的一部分中调用时一样,释放是非常重要的,因此没有内存泄漏.但请考虑以下两个例子:
首先,如果我的代码是这样的:
int main()
{
char *a = malloc(1024);
/* Do some arbitrary stuff with 'a' (no alloc functions) */
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这里真正的结果是什么?我的想法是,进程死了,然后堆空间无论如何都没有了,因此错过调用没有任何害处free(但是,我确实认识到无论如何都要将它关闭,可维护性和良好实践的重要性).我对这个想法是对的吗?
其次,假设我的程序有点像shell.用户可以声明类似的变量,aaa = 123并将其存储在某些动态数据结构中供以后使用.很明显,你可以使用一些解决方案来调用一些*alloc函数(hashmap,链表,类似的东西).对于这种程序,在调用之后永远自由是没有意义的,malloc因为这些变量必须在程序执行期间始终存在,并且没有好的方法(我可以看到)用静态分配的空间来实现它.拥有一堆已分配但仅作为流程结束的一部分释放的内存,这是不好的设计吗?如果是这样,有什么替代方案?
在不将字符串转换为全部大写或全部小写的情况下,在C++中进行不区分大小写的字符串比较的最佳方法是什么?
请说明这些方法是否符合Unicode,以及它们的可移植性.
有了新的标准,就会有新的做事方式,而且许多方式比旧方法更好,但旧的方式仍然很好.由于向后兼容的原因,新标准也没有正式弃用.所以剩下的问题是:
旧的编码方式肯定不如C++ 11样式,我们现在可以做些什么呢?
在回答这个问题时,你可以跳过诸如"使用自动变量"之类的显而易见的事情.
只是一个小问题shared_ptr.
使用shared_ptr指向数组是一个好习惯吗?例如,
shared_ptr<int> sp(new int[10]);
Run Code Online (Sandbox Code Playgroud)
如果没有,那么为什么不呢?我已经意识到的一个原因是不能增加/减少shared_ptr.因此,它不能像正常指向数组的指针一样使用.
我正在开发一个RESTful API,其中http://server/thingyapi/thingyblob/1234返回与thingy#1234相关联的文件(也称为"blob")以进行下载.但可能是请求是在服务器中不存在文件的情况下进行的,但绝大多数情况下都会在以后提供.服务器中有一个批处理过程,可以为所有东西生成所有blob.Thingy 1234已经存在,其数据(blob除外)已经可用.服务器还没有生成东西1234的blob.
我不想要回归404; 那是不存在的东西.这是一个存在的东西,但它的blob尚未生成.有点像YouTube视频的"处理".我认为重定向代码也不合适; 没有"其他"网址可供尝试.
在这种情况下返回的HTTP状态代码是什么?
language-agnostic rest http http-status-codes batch-processing
是否std::make_unique有像任何效率优势std::make_shared?
与手动构建相比std::unique_ptr:
std::make_unique<int>(1); // vs
std::unique_ptr<int>(new int(1));
Run Code Online (Sandbox Code Playgroud) 我在Qt 5中无法掌握新的信号/槽语法(使用指向成员函数的指针),如新信号槽语法中所述.我尝试改变这个:
QObject::connect(spinBox, SIGNAL(valueChanged(int)),
slider, SLOT(setValue(int));
Run Code Online (Sandbox Code Playgroud)
对此:
QObject::connect(spinBox, &QSpinBox::valueChanged,
slider, &QSlider::setValue);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编译它时出错:
错误:没有匹配的函数用于调用
QObject::connect(QSpinBox*&, <unresolved overloaded function type>, QSlider*&, void (QAbstractSlider::*)(int))
我曾经尝试过在Linux上使用clang和gcc -std=c++11.
我做错了什么,我该如何解决?
当我想搜索文件时,我使用Ctrl+ ,.弹出搜索框,然后我开始输入.但内置预览只会抓取我输入的内容并打开文件.即使我还在打字.
我正在尝试打开一个名为的文件report_vaccine,但我只能report在预览打开第一个选定的报告时获得.这使得这种快速文件搜索形式几乎无用,这令人沮丧,因为我们有数百个触发器,滚动浏览并手动查找文件是一个巨大的痛苦.
如果有办法关闭预览,我会很好.这个命令工作正常对我来说比预览要打开的文件更重要.
我没有resharper.我认为命令就像Ctrl+ Shift+ t.
我的项目目录如下所示:
/project
Makefile
main
/src
main.cpp
foo.cpp
foo.h
bar.cpp
bar.h
/obj
main.o
foo.o
bar.o
Run Code Online (Sandbox Code Playgroud)
我想让makefile做的就是将.cpp文件/src夹中的所有文件编译到.o文件/obj夹中的文件中,然后将所有.o文件链接/obj到顶级文件夹中的输出二进制文件中/project.
我几乎没有Makefiles的经验,我不确定要搜索什么来实现这一目标.
另外,这是一种"好"的方式,或者是否有更标准的方法来实现我的目标?
C++中数组和向量之间有什么区别?差异的一个例子可能包括图书馆,象征,能力等.
数组包含特定类型的特定数量的元素.因此编译器可以在编译程序时保留所需的空间量,您必须指定数组在定义时将包含的元素的类型和数量.编译程序时,编译器必须能够确定此值.一旦定义了数组,就可以使用数组的标识符和索引来访问数组的特定元素.[...]数组是零索引的; 也就是说,第一个元素是索引0.这个索引方案表示指针和数组之间C++中的密切关系以及语言为指针算法定义的规则.
- C++袖珍参考
向量是动态大小的对象序列,提供阵列式
operator[]随机访问.成员函数push_back通过复制构造函数复制其参数,将该副本添加为向量中的最后一项,并将其大小增加1.pop_back通过删除最后一个元素来完全相反.从向量的末尾插入或删除项目需要分摊常数,并且从任何其他位置插入或删除需要线性时间.这些是载体的基础.他们还有很多东西.在大多数情况下,矢量应该是C风格数组的首选.首先,它们是动态大小的,这意味着它们可以根据需要增长.您不必进行各种研究以找出最佳静态大小,如C阵列的情况; 矢量会根据需要增长,如果需要,可以手动调整大小.其次,向量提供与at成员函数(但不是operator[])的边界检查,这样如果引用不存在的索引而不是简单地观察程序崩溃或更糟,继续执行损坏的数据,则可以执行某些操作.- C++ Cookbook