小编Hay*_*ayt的帖子

C中的自由特定类型的内存分配

我发现了一种在C语言中分配矩阵的有趣方法,它可以在[i][j]不初始化的情况下使用double matrix_a[nrows][ncols].分配是

double (*matrix_a)[ncols] = (double (*)[ncols])malloc(sizeof(double) * (nrows) * (ncols));
Run Code Online (Sandbox Code Playgroud)

但我找不到如何正确地释放这种类型的分配.会这么简单free(matrix_a)吗?

c malloc free

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

什么时候有人将std :: vector定义为thread_local?

有没有宣布任何优势std::vectorthread_local?喜欢

static unique_ptr<std::vector<ObjectA>> vecVariable;
Run Code Online (Sandbox Code Playgroud)

声明std::vector为thread_local不会使其操作像pop_back()erase()同步.

由于在每一个STL容器,如果有一个线程修改的容器,然后应无并发线程读取或写入同一容器中,所以我不能做erase()pop_back()一对vector在并行/多线程环境中的对象.

即使我将vector声明为thread_local,我的代码也会在其中一个操作中崩溃.我知道我可能需要在锁定下执行这些操作,但我只是想了解何时有人会定义std::vectorthread_local

c++ multithreading vector thread-local stdvector

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

为什么继承的C++析构函数被调用了2次

我试过这段代码:

#include <iostream>
using namespace std;

class A {
public:
A(){cout<<"A();";}
 ~A(){cout<<"~A();";}
};

class B : public A {
public:
B(){cout<<"B();";}
 ~B(){cout<<"~B();";}
};

int main() {
A a =B();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:A(); B();〜B();〜A();〜A();

为什么A的析构函数被调用了2次?

c++ constructor destructor

0
推荐指数
1
解决办法
71
查看次数