问题标签 [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 投票
1 回答
2240 浏览

c++ - std::make_shared 需要默认构造函数有什么原因吗?

我试图弄清楚这是否是谷物的要求。

我不断收到类构造函数(默认构造函数)是私有的错误,我把它放在那里是有原因的。

但是,错误的起源行似乎是 std::make_shared,而不是谷物,它需要默认构造函数,但已经是友元类,因此应该可以访问它。

有人可以向我解释为什么会发生这种情况,更重要的是,除了公开这些构造函数之外,如何解决它?

编辑:

原始错误行来自:

SemanticGraph Tor 所在的位置:

0 投票
1 回答
1245 浏览

c++ - ''className' 不使用 make_shared 引用值'

这有效:

但如果我用 make_shared 来做:

我得到 ''ofxDTangibleBase' 不是指一个值' 我一直在寻找解决方法,但我发现人们遇到了很多参数等问题。

我忽略了什么吗?

编辑:

构造函数如下所示:

该类扩展了另一个类:

0 投票
2 回答
469 浏览

c++ - 如何创建 boost phoenix make_shared?

是否可以创建 boost phoenix 惰性变体std::make_shared?我的意思是,使之成为可能

一个不能使用BOOST_PHOENIX_ADAPT_FUNCTION,因为std::make_shared. 因此,如果可以编写一个,包装器可能应该是可变参数模板本身。

0 投票
1 回答
2130 浏览

c++ - make_shared 与模板构造函数

我有一个带有模板构造函数的类,并且想要一个shared_pointer。如:

我知道这条线make_shared不正确,但不知道解决方案。甚至可以make_shared使用模板构造函数调用吗?我是否需要将“新建”功能设为模板并以A<T>某种方式传入?...

0 投票
2 回答
3368 浏览

c++ - 如何结合 std::make_shared 和 new(std::nothrow)

C++ 的 new 可以选择在分配失败时返回空指针,而不是抛出 bad_alloc 异常。

(是的,我知道这只会阻止 new 抛出 bad_alloc;它不会阻止 Foo 的构造函数抛出异常。)

如果你想使用共享指针而不是原始指针,你通常应该使用 make_shared,因为它对控制块的分配很聪明。

make_shared 封装了新的,这使得(?)无法选择 nothrow 版本。因此,您似乎必须放弃 make_shared 并明确调用 new 。

这消除了使用 Foo 分配控制块的优化,并且控制块分配可能会独立于 Foo 分配而失败,但我不想关注这一点。让我们假设控制块很小,因此它的分配在实践中永远不会失败。我担心的是未能为 Foo 分配空间。

有没有办法获得 make_shared 的单一分配优势,同时在为 Foo 分配空间时保留简单地获取空指针而不是 bad_alloc 异常的能力?

0 投票
1 回答
1639 浏览

arrays - 用 make_shared 初始化 std::array

背景

我正在为网络协议编写驱动程序并有一个函数write(std::shared_ptr<package> package),其中packagestd::array<buffer_ptr,2>(0=>header,1=>body)。为方便起见,我想编写一个函数write(buffer_ptr body),该函数会自动生成标题并调用write. 为此,我想要我们std::make_shared,但是我在std::arraymake_shared通话中初始化时遇到了问题。

代码

我尝试了什么???

(这些导致编译器错误)

问题:

  1. 有没有解决方案来完成这项工作,还是我必须写一些类似的东西:

    package_ptr package=new package{header, body}; 写(包);

    1.b)我是否会因为不得不求助而失去效率package_ptr(new package)?(我记得在一个块中为指针和实例共享分配内存,以节省内存请求)

  2. Cppreference上读取:

    此外,如果 g 抛出异常, f(shared_ptr(new int(42)), g()) 可能会导致内存泄漏。如果使用 make_shared 则不存在此问题。

    为什么内存会泄漏(可以在被调用之前int(42)构造,在gg调用之前shared_ptr被调用)?1. 中的替代代码是否会遭受这种潜在的泄漏?

0 投票
0 回答
1740 浏览

c++ - Xcode 编译错误:使用未声明的标识符“make_shared”

我已经将一些与 VS2012 一起编译得很好的代码移植到了 Mac。但是现在 Xcode 脱口而出一个错误,它无法识别函数“make_shared”。这是c ++ 11的一部分。

我已经声明了以下内容:

这是代码:

我已升级到 Mac OSX Mavericks,并升级到 Xcode 版本 5.1.1 (5B1008) 我已将编译器设置为以下设置:

  1. 将源代码编译为objective-c++
  2. c++语言方言c++11 [-std=c++11]
  3. c++标准库:libstdc++(gnu c++标准库)
0 投票
0 回答
36 浏览

c++11 - 大括号初始化并将共享指针从派生类转换为基类

我正在尝试使用大括号初始化,使用多个指向派生类的共享指针来初始化指向基类的共享指针向量。代码(去除不相关的细节后)如下所示:

当我在 Visual Studio 2013 下编译这段代码并在控制台中运行它时,结果是:

然后程序崩溃。这是意料之中的,大括号初始化与 to 的隐式转换不兼容std::shared_ptr<Derived>std::shared_ptr<Base>还是 Visual Studio 中的错误?大括号初始化是否在幕后做了一些魔术,阻止了共享指针转换(例如,引用指针)?

0 投票
2 回答
844 浏览

c++ - C++11 将多个共享指针存储为原始指针

shared_ptr我的问题涉及make_sharedC++11。我有两个向量,第一个存储智能指针,第二个存储原始指针。第一个向量按我的预期工作,但向量2 只是令人困惑......

代码示例


输出


问题

我意识到创建原始指针而不是尝试转换智能指针会简单得多,但这让我很想知道为什么会这样?另外为什么每次推送都会改变vector2中的所有值?


链接

以下是我在 stackoverflow 中发现的一些问题,但他们没有回答我的问题,或者我可能不明白答案......

0 投票
1 回答
160 浏览

c++ - 将 make_shared 与 shared_ptr 一起使用s 只对 T < 56 字节有益?

据我了解,如果您使用std::make_shared它,它会与基础对象同时创建引用计数对象。

但是,如果 smart_ptr 指向的对象指针大于 56 字节,那么引用计数器是否最终不会位于不同的缓存行中(因为缓存行是 64 字节)?