问题标签 [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++ - 我可以将 boost::make_shared 与私有构造函数一起使用吗?
考虑以下:
看起来 DirectoryIterator 应该可以调用boost::make_shared<DirectoryIteratorImpl>
,因为它是DirectoryIteratorImpl
. 但是,此代码无法编译,因为 DirectoryIteratorImpl 的构造函数是私有的。
因为这个类是一个内部实现细节,客户端DirectoryIterator
永远不应该接触,如果我可以保持构造函数私有,那就太好了。
这是我的基本误解make_shared
还是我需要标记某种增强片段friend
以便编译调用?
c++ - 如何让 boost::make_shared 成为我班的朋友
我编写了一个带有受保护构造函数的类,因此只能使用静态 create() 函数生成新实例,该函数将 shared_ptr's 返回给我的类。为了提供有效的分配,我想在 create 函数中使用 boost::make_shared,但是编译器抱怨我的类构造函数在 boost::make_shared 中受到保护。我决定将我的 boost::make_shared 分享给班上的一个朋友,但我对语法感到困惑。我试过了
但是编译器给了我语法错误。请帮忙。
c++ - 将 make_shared 与受保护的构造函数 + 抽象接口一起使用
给定一个抽象接口和一个从该接口派生的实现,其中构造函数受到保护(这些对象的创建只能从类工厂获得 - 以实现 DI 模式),我如何在工厂函数中使用 make_shared ?
例如:
make_shared 显然无法访问 InterfaceImpl 或 IInterface 中的受保护构造函数,给我以下错误
所以在这里阅读(问题:如何使 boost::make_shared 成为我班的朋友),我尝试将以下内容放入实现类中:
它仍然无法编译。因此,我也将另一个放入 IInterface 类。仍然没有喜悦。我在这里做错了什么?
编辑:用于编译的完整源文件,带有“朋友”...
c++ - C++0x 和 Friend 函数和 boost::make_shared
如果我有一个具有私有构造的类,使用 gcc 4.6 从该类的成员函数中boost::make_shared()
构造shared_ptr
该类的一个将发出编译器错误。
调用Foo::do_foo
将导致编译器错误。
有什么想法吗?
c++11 - std::bind 调用 std::make_shared
我正在尝试通过在 std::make_shared 上调用 std::bind 来创建一个返回 shared_ptr 的函子,但是语法超出了我的范围,或者甚至不可能?如下所示,假设 MyBar 的构造函数采用对 MyFoo 的 const 引用:
c++ - boost::make_shared 的“单一分配”是什么意思
在make_shared的 boost 文档中,它说:
除了方便和风格之外,这样的函数也是异常安全的,并且速度相当快,因为它可以对对象及其相应的控制块使用单个分配,从而消除了 shared_ptr 构造开销的很大一部分。
我不明白“单一分配”的含义,这是什么意思?
c++ - 'boost::make_shared' : 对重载函数的模糊调用
我有以下类定义:
在其他地方,我想创建一个这样的类的实例:
但是,我在 Visual Studio 2010 中收到以下错误消息:
错误 C2668:'boost::make_shared':对重载函数的模糊调用
谁能告诉我为什么?我只定义了一个构造函数。谢谢!
c++ - make_shared 创建 std::shared_ptr?海合会 4.6.2
我正在使用 gcc 4.6.2。
我正在尝试在向量 shared_ptr 中 push_back。
但是 gcc 每次都会给我一个错误。
这是我的代码:
我的 gcc 给出的错误是:
在我看来,错误说的是,std::make_shared 创建了一个 std::shared_ptr。
但在 gcc 中,shared_ptr 位于命名空间 std::tr1 中。
我该如何解决?
c++ - 尝试制作 shared_ptr 时 std::make_shared() 中的错误?
(使用 Visual Studio 2010)我正在尝试在我的项目中创建一个现有类的 shared_ptr(类是在 std::shared_ptr 存在之前十年编写的)。这个类接受一个指向另一个对象的非常量指针,它的空参数构造函数是私有的。
当我尝试为其创建一个 shared_ptr 时,事情并不顺利:
在 VS2010 上,这给了我
由于某种原因,它似乎正在调用复制构造函数,Foobar
而不是使用Baz*
.
我也不确定这cannot convert from 'Foobar *' to 'const Foobar'
部分。我最好的解释是我的模板类型shared_ptr<Foobar>
是错误的。我做到了,shared_ptr<Foobar*>
但这似乎是错误的,我见过的所有示例都没有使类型成为原始指针。
似乎使所有内容都可以正确编译,但是当 all超出范围时shared_ptr<Foobar*>
,这会阻止Foobar
对象被正确删除吗?shared_ptr
编辑:这似乎相关,但我没有使用 Boost:boost make_shared 接受 const 引用。有什么办法可以解决这个问题?
Edit2:为清楚起见,如果您想知道我为什么要使用make_shared()
,在我的实际代码中,该sharedFoo
变量是第三类的类成员(独立于Foobar
and Baz
)。
c++ - C++ make_shared 不可用
虽然我std::tr1::shared_ptr<T>
的编译器中有可用的,但我没有make_shared
.
有人可以指出我的正确实施make_shared
吗?我看到我需要使用可变参数为 T 的构造函数提供参数。
但是我的编译器中也没有可用的可变参数模板。