问题标签 [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.

0 投票
4 回答
22380 浏览

c++ - 你能分配一个与 make_shared 等效的数组吗?

您可以使用 为数组分配内存make_shared<>()吗?

我可以:buffer = std::make_shared<char>( new char[64] );

但这仍然涉及调用 new,据我了解,它make_shared更安全、更有效。

0 投票
2 回答
5901 浏览

c++ - std::make_shared() 是否使用自定义分配器?

考虑这段代码

这是它的输出:

显然,std::make_shared()没有调用new操作员——它使用的是自定义分配器。这是标准行为std::make_shared()吗?

0 投票
1 回答
4434 浏览

c++ - C++ 为类模板提供初始化列表构造函数

我有一个带有模板参数 T 的类模板 Templ,而 Templ 类有一个类型为 T 的数据成员,称为 obj。我写了一个可变参数构造函数模板,它将参数转发给 obj 的构造函数:

现在我意识到类型 T 可能是一个带有初始化列表构造函数的类,我希望它可以通过 Templ 访问。所以我检查了什么std::list::emplacestd::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。

0 投票
0 回答
1971 浏览

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 版本?有人做过类似的测试吗?我的测试有什么问题或者我没有考虑到什么?

0 投票
1 回答
159 浏览

c++ - 如何在 c++ 中分配在 python 中创建的对象?

我基本上有一个非常简单的节点测试用例,我正在尝试修复。

我有一个带有 getChild 和 getParent 的简单 Node 类

可以通过 addChild 函数分配孩子

然后这个函数自动在相关类上设置父级(所以从c ++方面)

不幸的是,当我这样做时,我失去了 python 参考。

我想代码应该更好理解:

基本主类 MyNode

然后是boost python 绑定代码

完成我的 python 测试代码

问题肯定在于 addFunction 以及我如何使用 boost::make_shared 来设置父级。不幸的是,我不知道发生了什么.. 我尝试使用 boost 包装器:

但我仍然不确定应该如何修改 addChild 函数

任何想法 ?

0 投票
1 回答
228 浏览

c++ - make_shared 如何使用非默认内存管理

我有一个关于标准的问题..

所以假设我有管理我的内存分配的池..

我想使用 shared_ptr 并检查了 API ..

正如预期的那样,我看到对于 shared_ptr 我控制指针的分配,我可以给它一个释放函数,完美!

现在我看了STL的讲座,发现maked_shared的内存效率更高(因为它可以在同一个地方分配控制块和ptr)显然我直接去了maked_shared api,才发现make_shared在强迫我仅使用新/删除..所以问题是:

  1. 我对么?只有新/删除?
  2. 如果是这样,为什么?

谢谢!

0 投票
1 回答
249 浏览

c++ - boost::make_shared 和 C++Builder VCL 对象

我尝试使用newto切换一些 C++Builder 2010 代码boost::make_shared<>,如下所示。

老的:

新的:

旧代码可以工作,但是当我尝试使用指针(AV,或者只是挂起)时,新代码就会死掉。我以前用过make_sharedshared_ptr成功过,但从来没有用过TObject后代。这是一个已知问题 - 可能与make_shared使用放置的方式有关new()

0 投票
1 回答
307 浏览

ios - iOS 中 std::make_shared 调用析构函数的可变版本

以下...

产生以下结果

对 make_shared 的 2 参数调用最终在分配和分配它时调用了析构函数两次。

我用析构函数中的断点一次又一次地调试了这个。在 2 参数情况下,它位于 make_shared 调用的中间。

看不到代码有任何明显错误。还有人看到这个吗?想法?

0 投票
2 回答
567 浏览

c++ - 构造 shared_ptr 时遇到问题

我是智能指针的新手,我正在遇到每一个绊脚石。

我有一个结构texture_t

当我尝试shared_ptr使用此行制作此结构时:

我收到此错误:

这个错误来自哪里,我该如何避免它?

0 投票
1 回答
2696 浏览

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 个参数。不幸的是,我搜索过的其他网站并没有说明这个问题。任何帮助,将不胜感激。