小编Tob*_*ght的帖子

当你在malloc之后没有自由时真正发生了什么?

这已成为困扰我多年的事情.

我们都在学校(至少,我是)教过你必须释放每个分配的指针.不过,我有点好奇,关于不释放内存的实际成本.在一些明显的情况下,就像在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 malloc free

515
推荐指数
12
解决办法
11万
查看次数

C++中不区分大小写的字符串比较

在不将字符串转换为全部大写或全部小写的情况下,在C++中进行不区分大小写的字符串比较的最佳方法是什么?

请说明这些方法是否符合Unicode,以及它们的可移植性.

c++ string

373
推荐指数
20
解决办法
45万
查看次数

在C++ 11中不推荐使用哪些C++习惯用法?

有了新的标准,就会有新的做事方式,而且许多方式比旧方法更好,但旧的方式仍然很好.由于向后兼容的原因,新标准也没有正式弃用.所以剩下的问题是:

旧的编码方式肯定不如C++ 11样式,我们现在可以做些什么呢?

在回答这个问题时,你可以跳过诸如"使用自动变量"之类的显而易见的事情.

c++ c++-faq c++11

192
推荐指数
6
解决办法
2万
查看次数

shared_ptr到一个数组:它应该被使用?

只是一个小问题shared_ptr.

使用shared_ptr指向数组是一个好习惯吗?例如,

shared_ptr<int> sp(new int[10]);
Run Code Online (Sandbox Code Playgroud)

如果没有,那么为什么不呢?我已经意识到的一个原因是不能增加/减少shared_ptr.因此,它不能像正常指向数组的指针一样使用.

c++ shared-ptr c++11

157
推荐指数
2
解决办法
8万
查看次数

如何在REST API中为"未准备好,稍后再试"选择HTTP状态代码?

我正在开发一个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

143
推荐指数
7
解决办法
5万
查看次数

std :: make_unique和std :: unique_ptr之间的差异与new

是否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)

c++ smart-pointers unique-ptr c++11 c++14

118
推荐指数
4
解决办法
5万
查看次数

连接Qt 5中的过载信号和插槽

我在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.

我做错了什么,我该如何解决?

c++ qt qt5

117
推荐指数
3
解决办法
5万
查看次数

如何关闭Visual Studio 2013 Preview?

当我想搜索文件时,我使用Ctrl+ ,.弹出搜索框,然后我开始输入.但内置预览只会抓取我输入的内容并打开文件.即使我还在打字.

我正在尝试打开一个名为的文件report_vaccine,但我只能report在预览打开第一个选定的报告时获得.这使得这种快速文件搜索形式几乎无用,这令人沮丧,因为我们有数百个触发器,滚动浏览并手动查找文件是一个巨大的痛苦.

如果有办法关闭预览,我会很好.这个命令工作正常对我来说比预览要打开的文件更重要.

我没有resharper.我认为命令就像Ctrl+ Shift+ t.

search command ctrl visual-studio visual-studio-2013

116
推荐指数
3
解决办法
2万
查看次数

我可以在obj /中将src /中的所有.cpp文件编译为.o,然后在./中链接到二进制文件.

我的项目目录如下所示:

/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++ build-process makefile

112
推荐指数
2
解决办法
12万
查看次数

数组与向量:介绍的相似之处和不同之处

C++中数组和向量之间有什么区别?差异的一个例子可能包括图书馆,象征,能力等.

排列

数组包含特定类型的特定数量的元素.因此编译器可以在编译程序时保留所需的空间量,您必须指定数组在定义时将包含的元素的类型和数量.编译程序时,编译器必须能够确定此值.一旦定义了数组,就可以使用数组的标识符和索引来访问数组的特定元素.[...]数组是零索引的; 也就是说,第一个元素是索引0.这个索引方案表示指针和数组之间C++中的密切关系以及语言为指针算法定义的规则.

- C++袖珍参考

向量

向量是动态大小的对象序列,提供阵列式operator[]随机访问.成员函数push_back通过复制构造函数复制其参数,将该副本添加为向量中的最后一项,并将其大小增加1.pop_back通过删除最后一个元素来完全相反.从向量的末尾插入或删除项目需要分摊常数,并且从任何其他位置插入或删除需要线性时间.这些是载体的基础.他们还有很多东西.在大多数情况下,矢量应该是C风格数组的首选.首先,它们是动态大小的,这意味着它们可以根据需要增长.您不必进行各种研究以找出最佳静态大小,如C阵列的情况; 矢量会根据需要增长,如果需要,可以手动调整大小.其次,向量提供与at成员函数(但不是operator[])的边界检查,这样如果引用不存在的索引而不是简单地观察程序崩溃或更糟,继续执行损坏的数据,则可以执行某些操作.

- C++ Cookbook

c++ arrays vector

104
推荐指数
3
解决办法
15万
查看次数