小编kad*_*ina的帖子

堆是否与C中的进程相关?

我正在阅读malloc()和calloc()如何能够从堆中分配内存,我遇到了一个网站(http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html),其中说"如果你不释放内存,它将是一个内存泄漏,内存将无法用于其他进程分配内存".但到目前为止,我一直认为堆内存是每个进程,一个进程的堆内存不与其他进程的堆内存混合在一起.任何人都可以告诉我,我的理解是否正确?

c linux

5
推荐指数
1
解决办法
443
查看次数

为什么io模块对象没有属性'RawIOBase',尽管我使用的是python 2.6

我试图在python中使用'RawIOBase'创建一个类,如下所示.

try:
    import io
except ImportError:
    class Serial(PosixSerial, FileLike):
        pass
else:
    class Serial(PosixSerial, io.RawIOBase):
        pass
Run Code Online (Sandbox Code Playgroud)

我试图使用Python 2.6运行它,但它显示错误:

AttributeError:'module'对象没有属性'RawIOBase'

我读到从Python 2.6开始支持RawIOBase.

python

4
推荐指数
1
解决办法
1195
查看次数

msgget()和mq_open之间的区别

我阅读了有关消息队列操作,如msgget(),msgsnd()和msgrcv().但是当我在堆栈溢出中搜索与消息队列相关的问题时,我才知道还有另一组消息队列操作,如mq_open(),mq_send(),mq_receive().任何人都可以告诉我这两种类型的消息队列之间有什么区别,以及广泛使用哪种类型的消息队列?

c linux message-queue

4
推荐指数
2
解决办法
2386
查看次数

为什么复制构造函数被调用,即使我实际上是在C++中复制到已经创建的对象?

我写下面的代码,我不明白为什么复制构造函数被调用.

#include <iostream>

using namespace std;

class abc
{
    public:
        abc()
        {
            cout << "in Construcutor" << (this) << endl;
        };

        ~abc()
        {
            cout << "in Destrucutor" << (this) << endl;
        };

        abc(const abc &obj)
        {
            cout << "in copy constructor" << (this) << endl;
            cout << "in copy constructor src " << &obj << endl;
        }

        abc& operator=(const abc &obj)
        {
            cout << "in operator =" << (this) << endl;
            cout << "in operator = src " << &obj …
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor

4
推荐指数
1
解决办法
121
查看次数

使用有符号和无符号 r 值引用进行函数重载

我试图理解函数重载中的 r 值引用,如下面的代码所示。

#include <iostream>

using namespace std;

void test(int && n) {
    cout << "in test int &&" << endl;
}

void test(unsigned int && n) {
    cout << "in test unsigned int &&" << endl;
}

int main() {
    unsigned int n = 5;
    test(std::move(n)); // ---> 1
    test(n);            // ---> 2
    test(5);            // ---> 3

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

下面是输出

in test unsigned int &&
in test int &&
in test int &&
Run Code Online (Sandbox Code Playgroud)

输出行 1 是预期的,输出行 3 也是预期的,因为默认 …

c++

4
推荐指数
1
解决办法
72
查看次数

RAII和shared_ptr之间的关系是什么?

我理解RAII的概念(资源获取是初始化).它基本上说应该在析构函数中回收资源以避免任何内存泄漏.但我不明白shared_ptr是一种RAII.因为shared_ptr不保证指针将在堆栈末尾被删除.删除完全取决于计数器.那么它与RAII有什么关系呢?

c++ raii shared-ptr

3
推荐指数
1
解决办法
504
查看次数

unique_ptr优于auto_ptr的优点?

我不完全理解的好处unique_ptrauto_ptr,或者我还没有完全相信,为什么我们需要使用unique_ptr.

我看到以下差异.

1)unique_ptr支持数组,因此unique_ptr析构函数调用delete []数组,而auto_ptr析构函数只调用数组delete.

2)std::move()必须使用而不是直接复制unique_ptr.但是我们有什么优势std::move()?我将尝试解释如下.

auto_ptr <int> p1 (new int);
auto_ptr <int> p2 = p1;    // Now p1 is NULL and p2 exists with value of p1

unique_ptr <int> p1 (new int);
unique_ptr <int> p2 = std::move(p1);    // Now p1 is NULL and p2 exists with value of p1
Run Code Online (Sandbox Code Playgroud)

那么我们将获得的优势是什么?

3)我在互联网上阅读,unique_ptr可以在容器中使用.但如果我理解正确,这不是伟大的事情unique_ptr.容器函数语义已经改变,所以现在一天,复制没有在容器函数内部完成.但这是多么伟大的事情unique_ptr呢?现在容器功能已经改变了,为什么我们不能auto_ptr …

c++ auto-ptr unique-ptr

3
推荐指数
1
解决办法
1143
查看次数

为什么grep命令在第二次执行时花费的时间更少?

当我在大型本地文件上执行grep时,需要很长时间.但是当我再次这样做时,现在它要快得多.这种行为是因为Linux系统维护了某种类型的内部缓存吗?

linux grep

3
推荐指数
1
解决办法
179
查看次数

为什么在std :: for_each()返回时调用转换运算符?

我正在学习仿函数及其用法.我遇到了一个堆栈溢出问题中的代码.

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

class CalculateAverage
{
private:
   std::size_t num;
   double sum;

public:    
   CalculateAverage() : num (0) , sum (0)
   {
   }

   void operator()(int elem) 
   {
      num++;
      sum += elem;
   }

   operator double () const
   {
       return sum / num;
   }
};

int main()
{
    vector<int> values;

    for (int i = 1; i <= 5; i++)
        values.push_back(i);

    int average = std::for_each(values.begin(), values.end(), CalculateAverage());

    cout << average << endl;
}
Run Code Online (Sandbox Code Playgroud)

输出:3

我理解仿函数的概念.但我不明白为什么要调用转换函数.std :: for_each()返回与传递给for_each()的函数相同的函数作为最后一个参数.这里我们传递()重载函数.有人可以帮我理解为什么在这种情况下调用转换函数?

c++ stl c++11

3
推荐指数
1
解决办法
55
查看次数

当我显式调用构造函数作为参数时,未调用move构造函数

我正在尝试学习move构造函数。我写了下面的程序。

#include <iostream>
#include <algorithm>

using namespace std;

class myclass {
    public:
        myclass() { 
            cout << "In Constructor" << endl;
        }

        ~myclass() {
            cout << "In Destructor" << endl;
        }

        myclass(const myclass &obj) {
            cout << "In Copy Constructor" << endl;
        }

        myclass(myclass &&obj) {
            cout << "In Move Constructor" << endl;
        }
};

int main()
{
    myclass obj = myclass();       // Line 1
    myclass obj(myclass());        // Line 2
}
Run Code Online (Sandbox Code Playgroud)

第1行按预期工作,如果我使用'-fno-elide-constructors'标志,则会调用move构造函数。但是对于第二行,什么也没发生。甚至没有构造函数被调用。我以为move构造函数也将被称为第2行。但是没有函数被调用。我知道如果我显式调用构造函数,则对象将在表达式末尾销毁。但是我不确定为什么连构造函数都没有被调用。有人可以让我知道2号线出了什么问题吗?

c++ c++11

3
推荐指数
1
解决办法
66
查看次数