C++ 使用初始化创建指向新结构的共享指针
在Mac上的Xcode中使用LLVM编译器libc++(GNU++11方言) 我有一个结构如下:C++ 使用初始化创建指向新结构的共享指针,c++,struct,C++,Struct,在Mac上的Xcode中使用LLVM编译器libc++(GNU++11方言) 我有一个结构如下: struct Vertex { float position[3]; float colour[4]; float normal[3]; }; Vertex *vertex = new Vertex({{0.1f, 0.1f, 0.1f}, {0.0f, 0.0f, 0.0f, 0.0f},
struct Vertex
{
float position[3];
float colour[4];
float normal[3];
};
Vertex *vertex = new Vertex({{0.1f, 0.1f, 0.1f},
{0.0f, 0.0f, 0.0f, 0.0f},
{1.0f, 0.0f, 0.0f}} );
目前,我正在堆上创建一个实例,如下所示:
struct Vertex
{
float position[3];
float colour[4];
float normal[3];
};
Vertex *vertex = new Vertex({{0.1f, 0.1f, 0.1f},
{0.0f, 0.0f, 0.0f, 0.0f},
{1.0f, 0.0f, 0.0f}} );
但是,我想创建一个共享指针。
下面的代码是最好的方法吗
Vertex v = Vertex( {{0.1f, 0.1f, 0.1f},
{0.0f, 0.0f, 0.0f, 0.0f},
{1.0f, 0.0f, 0.0f}} );
std::shared_ptr<Vertex> vertex = std::make_shared<Vertex>(v);
正如所建议的,但是我在第一个代码段(更新之前的代码段)中得到错误没有匹配函数调用“make_shared”
,std::make_shared
将为一个新的向量分配内存,并使用给定的参数v
构造它,在本例中,复制构造。它会很好用的
第二个代码段(在更新中)不起作用,因为编译器无法推导出与参数匹配的正确类型。函数模板std::make_shared声明为:
template< class T, class... Args >
shared_ptr<T> make_shared( Args&&... args );
模板
共享\u ptr使\u共享(Args&…Args);
这个问题可以通过“转换”来解决
auto-vertex=std::共享(
顶点{0.1f,0.1f,0.1f},
{0.0f,0.0f,0.0f,0.0f},
{1.0f,0.0f,0.0f});
通常您只需将PCNVertex*顶点
替换为自动顶点2
和新的PCNVertex(…)代码>与std::使_共享(…)代码>@NathanOliver我已经试过了,我得到了“错误:(140,19)没有匹配的函数来调用‘make_shared’”,你在用什么编译器,用什么选项来编译?是否打开了C++11?是否包括
?你的PCNVertex
是什么?我已经更正了PCNVertex
,我的意思是写Vertex
,对不起。对不起,我意识到我从来没有接受过这个答案!好了,谢谢。