c ++:如何初始化已使用malloc分配的std :: mutex?

use*_*931 2 c++ malloc mutex initialization

// Example program
#include <mutex>

struct A {
 std::mutex m;
};

int main()
{
   A* a = (A*) malloc(sizeof(A));
   a->m = std::mutex();
}
Run Code Online (Sandbox Code Playgroud)

这给了我

In function 'int main()':
11:9: error: use of deleted function 'std::mutex& std::mutex::operator=(const std::mutex&)'
In file included from 2:0:
/usr/include/c++/4.9/mutex:130:12: note: declared here
     mutex& operator=(const mutex&) = delete;
        ^
Run Code Online (Sandbox Code Playgroud)

我如何正确初始化他的互斥锁 m?

我使用 malloc 而不是 new 的原因是因为我在全局替换中使用此代码,new并且我不希望它递归到替换中。

Nat*_*ica 5

当你做

A* a = (A*) malloc(sizeof(A));
Run Code Online (Sandbox Code Playgroud)

您实际上没有指向A的位置a。您只需为A. 您需要做的是在该指针上使用placement new,以便A可以在该内存中初始化对象。那看起来像

new (a) A{};
Run Code Online (Sandbox Code Playgroud)