问题标签 [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 回答
1078 浏览

c++ - 单例 - 实施。使用静态类成员与静态成员变量

给大家带来两种不同的单例设计模式植入:

静态类成员

静态成员变量

我总是使用第一个 impl。SingletonCSM. 在我们的代码中,我遇到了一个 impl。像SingletonFSV

问题

  1. 我们可以同时考虑这两个 impl。作为一个有效的暗示。的设计模式?
  2. 两者在功能上是否相同?

动机

背景

SingletonFSV是作为 DLL 项目的一部分实现的。这个 DLL 编译在 中VS 2013,通过 exe 文件加载到内存中并运行。

问题

我已经升级VSVS 2015,编译了 DLL 项目并运行了 exe。突然,它崩溃了。在调试时,我注意到崩溃发生在 DLL 本身中。make_shared调用withingGetInstance()返回nullptr,自然会造成segmentation fault。

解决方案

我已经改变了SingletonFSVimpl。到SingletonCSM并且坠机停止了。make_shared返回了一个有效的指针,问题就解决了。

问题

我只是不明白问题是什么,为什么解决了?

0 投票
1 回答
721 浏览

c++ - make_shared 如何为管理器对象和托管对象分配单个动态内存

make_shared 将动态分配单个内存,从而提高性能。但是它如何为托管对象和控制块使用 new 进行单个内存分配。我想知道内存分配实际上是如何在内部发生的。

0 投票
1 回答
1074 浏览

c++ - Compiler complains make_shared() expects l-value

I have a simple class. One of its constructors takes two int values as arguments:

simple_class.h

test.t.cpp

Running on a macbook. Here is my compile statement:

gcc -o test -I. test.t.cpp -lstdc++

But it produces this error:

So my question is, why doesn't this usage of make_shared() work?

Notice that the version with the l-values passed does compile:

Can anyone explain why this is?

My constructor declares the arguments as const (although that should not be necessary). And the examples given here pass constants to make_shared().

0 投票
2 回答
292 浏览

c++ - 什么是未知大小的 make_shared?

这个答案 TC 状态

boost::make_shared等支持数组类型-未知大小之一或固定大小之一

首先,make_shared 如何支持未知大小的数组类型?我认为数组大小是必需的。

二、sh_arr2和sh_arr3有什么区别?两者似乎都在创建一个大小为 30 的 int 数组。

0 投票
1 回答
360 浏览

c++ - C++新手:make_shared的操作

我是 C++ 新手。有人可以让我知道以下代码段有什么问题 -

我的意图是创建一个 Person 对象的数据库,我试图为此使用 shared_ptr 。

v->dump() 导致分段错误。但是,如果我使用 'namestr' 变量而不是字符串文字“Dull”,那么 v->dump() 似乎可以正常工作,即以下 -

此外,即使我在初始化程序中使用字符串文字,以下方式似乎也有效。

指出我所犯的错误将不胜感激!

0 投票
2 回答
1381 浏览

c++ - 在没有模板参数的情况下提升 make_shared

我正在尝试将指向堆栈变量的指针传递给仅需要boost::shared_ptr.

根据这个答案,使用boost::make_shared是要走的路。为了测试这个功能,我写了这个:

但它会引发以下错误:

如果我像这样添加模板参数,它可以工作,但这是什么原因?

谢谢!

0 投票
1 回答
477 浏览

c++ - 为什么在使用静态 constexpr 成员构造时 std::make_shared 与 new 不同?

调用 foo() 时会出现以下错误:

当我使用 new 初始化 shared_ptr 时,没关系。但是当我使用 make_shared 时,会出现链接错误。

为什么在使用静态 constexpr 成员构造时 std::make_shared 与 new 不同?

我的环境是带有 Clion 的 macOS,CMakeList.txt 是:

0 投票
1 回答
1307 浏览

c++ - 如何将 protobuf 的 boost::shared_ptr 指针传递给函数?

我必须通过一个boost::shared_ptr

这是 protobuf 的指针,指向 protobuf 的函数oPerson.set_allocated_profile(pProfile),但oPerson.set_allocated()需要一个指向Protobuf::Person::Profile.

我尝试了几种方法,但我认为当我尝试将 protobuf 对象转换为 JSON 时,使用pbjson::pb2Json的是基于快速 json 构建的库函数,指针超出范围导致分段错误。

方法一:

方法二:

0 投票
2 回答
2200 浏览

c++11 - 使用 std::make_shared 分配 std::weak_ptr

我在使用时偶然发现了这种行为std::weak_ptrstd::make_shared我发现它有点奇怪。我正在使用 C++11。

第一个std::cout打印正常,第二个给我一个段错误。我尝试查看cppreferencestd::weak_ptr的页面和std::shared_ptr页面,但我仍然不明白为什么会发生这种情况。必须创建一个临时对象对我来说很麻烦,这是在 C++14 中已经解决的问题还是我没有看到的东西?

谢谢!

0 投票
3 回答
603 浏览

c++ - std::make_shared()、std::weak_ptr 和循环引用

我的问题是关于这个说法:

如果任何 std::weak_ptr 在所有共享所有者的生命周期结束后引用由 std::make_shared 创建的控制块,则 T 占用的内存将持续存在,直到所有弱所有者也被销毁,如果 sizeof(T) 为大的。来源

我在这里读到,这个对象一直存在到最后一个weak_ptr 存在。它是释放使用 make_shared 生成的对象,循环引用 self 还是将永远存在于内存中?

例如: