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

c++ - 我可以将 boost::make_shared 与私有构造函数一起使用吗?

考虑以下:

看起来 DirectoryIterator 应该可以调用boost::make_shared<DirectoryIteratorImpl>,因为它是DirectoryIteratorImpl. 但是,此代码无法编译,因为 DirectoryIteratorImpl 的构造函数是私有的。

因为这个类是一个内部实现细节,客户端DirectoryIterator永远不应该接触,如果我可以保持构造函数私有,那就太好了。

这是我的基本误解make_shared还是我需要标记某种增强片段friend以便编译调用?

0 投票
6 回答
8244 浏览

c++ - 如何让 boost::make_shared 成为我班的朋友

我编写了一个带有受保护构造函数的类,因此只能使用静态 create() 函数生成新实例,该函数将 shared_ptr's 返回给我的类。为了提供有效的分配,我想在 create 函数中使用 boost::make_shared,但是编译器抱怨我的类构造函数在 boost::make_shared 中受到保护。我决定将我的 boost::make_shared 分享给班上的一个朋友,但我对语法感到困惑。我试过了

但是编译器给了我语法错误。请帮忙。

0 投票
2 回答
7429 浏览

c++ - 将 make_shared 与受保护的构造函数 + 抽象接口一起使用

给定一个抽象接口和一个从该接口派生的实现,其中构造函数受到保护(这些对象的创建只能从类工厂获得 - 以实现 DI 模式),我如何在工厂函数中使用 make_shared ?

例如:

make_shared 显然无法访问 InterfaceImpl 或 IInterface 中的受保护构造函数,给我以下错误

所以在这里阅读(问题:如何使 boost::make_shared 成为我班的朋友),我尝试将以下内容放入实现类中:

它仍然无法编译。因此,我也将另一个放入 IInterface 类。仍然没有喜悦。我在这里做错了什么?

编辑:用于编译的完整源文件,带有“朋友”...

0 投票
2 回答
1192 浏览

c++ - C++0x 和 Friend 函数和 boost::make_shared

如果我有一个具有私有构造的类,使用 gcc 4.6 从该类的成员函数中boost::make_shared()构造shared_ptr该类的一个将发出编译器错误。

调用Foo::do_foo将导致编译器错误。

有什么想法吗?

0 投票
1 回答
1328 浏览

c++11 - std::bind 调用 std::make_shared

我正在尝试通过在 std::make_shared 上调用 std::bind 来创建一个返回 shared_ptr 的函子,但是语法超出了我的范围,或者甚至不可能?如下所示,假设 MyBar 的构造函数采用对 MyFoo 的 const 引用:

0 投票
2 回答
912 浏览

c++ - boost::make_shared 的“单一分配”是什么意思

make_shared的 boost 文档中,它说:

除了方便和风格之外,这样的函数也是异常安全的,并且速度相当快,因为​​它可以对对象及其相应的控制块使用单个分配,从而消除了 shared_ptr 构造开销的很大一部分。

我不明白“单一分配”的含义,这是什么意思?

0 投票
1 回答
2613 浏览

c++ - 'boost::make_shared' : 对重载函数的模糊调用

我有以下类定义:

在其他地方,我想创建一个这样的类的实例:

但是,我在 Visual Studio 2010 中收到以下错误消息:

错误 C2668:'boost::make_shared':对重载函数的模糊调用

谁能告诉我为什么?我只定义了一个构造函数。谢谢!

0 投票
2 回答
6065 浏览

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 中。
我该如何解决?

0 投票
1 回答
12393 浏览

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变量是第三类的类成员(独立于Foobarand Baz)。

0 投票
1 回答
3210 浏览

c++ - C++ make_shared 不可用

虽然我std::tr1::shared_ptr<T>的编译器中有可用的,但我没有make_shared.

有人可以指出我的正确实施make_shared吗?我看到我需要使用可变参数为 T 的构造函数提供参数。

但是我的编译器中也没有可用的可变参数模板。