我发现了一种在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)
吗?
有没有宣布任何优势std::vector
的thread_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::vector
为thread_local
?
我试过这段代码:
#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++ ×2
c ×1
constructor ×1
destructor ×1
free ×1
malloc ×1
stdvector ×1
thread-local ×1
vector ×1