问题标签 [make-shared]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 你能分配一个与 make_shared 等效的数组吗?
您可以使用 为数组分配内存make_shared<>()
吗?
我可以:buffer = std::make_shared<char>( new char[64] );
但这仍然涉及调用 new,据我了解,它make_shared
更安全、更有效。
c++ - C++ 为类模板提供初始化列表构造函数
我有一个带有模板参数 T 的类模板 Templ,而 Templ 类有一个类型为 T 的数据成员,称为 obj。我写了一个可变参数构造函数模板,它将参数转发给 obj 的构造函数:
现在我意识到类型 T 可能是一个带有初始化列表构造函数的类,我希望它可以通过 Templ 访问。所以我检查了什么std::list::emplace
和std::make_shared
做什么。他们有一个像我一样的可变参数函数,但他们没有覆盖初始化列表。由于某些原因。
所以第一个问题:为什么?我的意思是,如果我将某个类 T 与一个 init-list ctor 一起使用,然后我使用std::list<T>
? 为什么 list::emplace 没有采用 initializer_list 的版本?也许我也应该这样做是有充分理由的……所以我想知道。
另外,不管 STL 做什么——我应该提供一个 init-list ctor 作为好的设计吗?我的意思是,它就像可变参数 ctor,对吧?允许用户选择任何类型或类 T 与 Templ<> 一起使用并直接调用为 T 定义的任何 ctor。即使它是一个采用 init-list 的 ctor。
boost - intrusive_ptr、shared_ptr 性能测试
我在发布模式下使用 vs2010 得到了以下结果。
生成 1000000 个 intrusive_ptr 所需的时间为 116 生成 1000000 个 shared_ptr 所需的时间为 175 生成 1000000 个 Microsoft shared_ptr 所需的时间为 182 使用 make_shared 生成 1000000 个 shared_ptr 所需的时间为 176 使用 make_shared 生成 1000000 个 Microsoft shared_ptr 所需的时间为120
似乎 intrusive_ptr 是最快的,但似乎 MS 使用 make_shared 函数对 shared_ptr 也做得很好。但是为什么 boost make_shared 的性能不如 MS 版本?有人做过类似的测试吗?我的测试有什么问题或者我没有考虑到什么?
c++ - 如何在 c++ 中分配在 python 中创建的对象?
我基本上有一个非常简单的节点测试用例,我正在尝试修复。
我有一个带有 getChild 和 getParent 的简单 Node 类
可以通过 addChild 函数分配孩子
然后这个函数自动在相关类上设置父级(所以从c ++方面)
不幸的是,当我这样做时,我失去了 python 参考。
我想代码应该更好理解:
基本主类 MyNode:
然后是boost python 绑定代码:
完成我的 python 测试代码:
问题肯定在于 addFunction 以及我如何使用 boost::make_shared 来设置父级。不幸的是,我不知道发生了什么.. 我尝试使用 boost 包装器:
但我仍然不确定应该如何修改 addChild 函数
任何想法 ?
c++ - make_shared 如何使用非默认内存管理
我有一个关于标准的问题..
所以假设我有管理我的内存分配的池..
我想使用 shared_ptr 并检查了 API ..
正如预期的那样,我看到对于 shared_ptr 我控制指针的分配,我可以给它一个释放函数,完美!
现在我看了STL的讲座,发现maked_shared的内存效率更高(因为它可以在同一个地方分配控制块和ptr)显然我直接去了maked_shared api,才发现make_shared在强迫我仅使用新/删除..所以问题是:
- 我对么?只有新/删除?
- 如果是这样,为什么?
谢谢!
c++ - boost::make_shared 和 C++Builder VCL 对象
我尝试使用new
to切换一些 C++Builder 2010 代码boost::make_shared<>
,如下所示。
老的:
新的:
旧代码可以工作,但是当我尝试使用指针(AV,或者只是挂起)时,新代码就会死掉。我以前用过make_shared
并shared_ptr
成功过,但从来没有用过TObject
后代。这是一个已知问题 - 可能与make_shared
使用放置的方式有关new()
?
ios - iOS 中 std::make_shared 调用析构函数的可变版本
以下...
产生以下结果
对 make_shared 的 2 参数调用最终在分配和分配它时调用了析构函数两次。
我用析构函数中的断点一次又一次地调试了这个。在 2 参数情况下,它位于 make_shared 调用的中间。
看不到代码有任何明显错误。还有人看到这个吗?想法?
c++ - 构造 shared_ptr 时遇到问题
我是智能指针的新手,我正在遇到每一个绊脚石。
我有一个结构texture_t
:
当我尝试shared_ptr
使用此行制作此结构时:
我收到此错误:
这个错误来自哪里,我该如何避免它?
c++ - 错误:没有重载函数“std::make_shared”的实例与参数列表匹配
查看std:make_shared 与 std::shared_ptr的先前堆栈问题,我试图在 uni 项目中实现这一点。这是之前的“问题”:
我想不出任何情况
std::shared_ptr<Object> obj(new Object("foo", 1));
会更喜欢
auto obj = std::make_shared<Object>("foo", 1);
因此,我采用了以下代码:
并将其修改为以下代码:
但是,std::make_shared 带有红色下划线,当我将鼠标悬停在它上面时出现错误:“错误:没有重载函数的实例“std::make_shared”与参数列表匹配”
我的代码可以使用第一行代码正确编译和执行,但是如果我使用第二行代码,则会出现一些错误。
这些错误是:
`1>------ 构建开始:项目:SIT153Canvas,配置:Debug Win32 ------ 1> main.cpp
1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): 错误 C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&,_V2_t && ,_V3_t &&,_V4_t &&)' :需要 5 个参数 - 提供 10 个
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 见 'std::make_shared' 的声明
1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): 错误 C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&,_V2_t && ,_V3_t &&)' : 需要 4 个参数 - 提供 10 个
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 见 'std::make_shared' 的声明
1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): 错误 C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&,_V2_t && )' : 需要 3 个参数 - 提供 10 个
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 见 'std::make_shared' 的声明
1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): 错误 C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&,_V1_t &&)' :需要 2 个参数 - 提供 10 个
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 见 'std::make_shared' 的声明
1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): 错误 C2780: 'std::shared_ptr<_Ty> std::make_shared(_V0_t &&)' : 需要 1 个参数- 提供 10 个
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 见 'std::make_shared' 的声明
1>c:\users\steve\documents\visual studio 2012\projects\sit153canvas\main.cpp(54): 错误 C2780: 'std::shared_ptr<_Ty> std::make_shared(void)' : 需要 0 个参数 -提供 10 个
1> c:\program files (x86)\microsoft visual studio 11.0\vc\include\memory(972) : 见 'std::make_shared' 的声明
根据错误, std::make_shared 似乎只期望最多 5 个参数。不幸的是,我搜索过的其他网站并没有说明这个问题。任何帮助,将不胜感激。