问题标签 [scoped-ptr]

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 回答
16296 浏览

c++ - 带 malloc 和 free 的 shared_ptr

我在包含 c 和 cpp 的大型应用程序中工作。所有文件都保存为 cpp 扩展名,但代码是用 c-style 编写的。我的意思是它是通过 malloc 和 realloc 和 calloc 定义结构而不是类分配内存。最近他们已经安装了 boost 库所以我打算在我现有的代码库中使用所以我有一些以下问题。

  1. 我可以将 std::shared_ptr 与 malloc 和 free 一起使用吗?
  2. 如果是的话,谁能指出我的示例代码库?
  3. 如果我在我的应用程序中创建 std::shared_ptr 并将这个指针传递给另一个使用 malloc 或 calloc 的函数,它会影响任何功能吗?

或者换句话说:

对于以下代码,如何使用 std::shared_ptr 实现类似的功能:

我们调用一些函数,它们接受双指针并填充其应用程序内部的结构并使用 malloc。我们可以将这些指针分配给 std::shared_ptr 吗?例如:

0 投票
1 回答
319 浏览

c++ - C ++ Boost库 - 将共享指针传递给函数

假设可以按如下方式创建共享指针

我需要传递共享指针,它将分配由 ptr 指向的内存。像这样的东西。

如何使用shared_ptr上面的代码实现类似的功能。

0 投票
2 回答
691 浏览

c++ - 在 scoped_ptr 异常的情况下不调用析构函数

我刚刚开始使用 c++ boost 库。我在很多地方读到,当使用 scoped_ptr 时,即使出现异常,对象也总是被销毁。

它们的行为很像内置的 C++ 指针,只是它们会在适当的时候自动删除指向的对象。智能指针在面对异常时特别有用,因为它们确保正确销毁动态分配的对象。

我尝试了以下代码。

没有调用 B 的析构函数。但是我使用了 scoped_ptr,所以它应该调用 B 的析构函数,还是我误解了 scoped_ptr 的使用。

但是如果 a 用 try catch 包围它,则调用 B 的析构函数。

在这种情况下, A 的析构函数将被调用,因为在 try 块中出现异常的情况下,所有本地分配的对象都从堆栈中删除,并且我将指针包裹在里面和 scoped_ptr 的对象,所以当作用域对象的析构函数最终销毁指针时. scoped_ptr 也很有用,因为我们不必显式删除分配的内存,否则我误解了 scoped_ptr 的描述。

如果使用 scoped_ptr 发生异常,如何调用 B 类的析构函数

0 投票
2 回答
693 浏览

c++ - 为什么智能指针没有转换运算符回到基指针?

如果经常发现自己使用这样的代码:

现在,我认为智能指针可以轻松地将隐式转换运算符定义回“原始”指针类型,这将允许该代码仍然有效,并简化旧代码的“智能”

但是,他们没有——或者至少,不是我找到的那些。为什么?

0 投票
2 回答
1422 浏览

c++ - C++ 中的 boost::scoped_ptr 和 STL

我正在阅读有关 boost 智能指针的信息,而我无法理解的一件事是为什么 boost::scoped_ptr 不能与 STL 容器一起使用?我读过它是不可复制的,但这究竟是什么意思,为什么 STL 需要它?

0 投票
1 回答
312 浏览

c++ - Boost Scoped Ptr - 声明与分配

下面的代码工作正常:

但以下语句不起作用:

我收到如下编译错误:

请帮我解决这个问题。

附加信息:clsA源自claX

0 投票
1 回答
181 浏览

c++ - 在顶层使用 shared_ptr 而不是 scoped_ptr 有什么优势吗?

我的团队对于特定上下文的指针容器使用存在一些分歧。请考虑:

(我希望你能理解这里实际上并不存在的特殊预处理器代码,但如果它存在就好了:)

我们目前拥有的代码处于状态“1b”(shared_ptr 成员,传递裸 ptr),但我们认为这不是应该的样子。我很想知道任何人乍一看认为是最自然/合理和最安全的事情和理由。或者,如果有人想建议“3”或“d”。我自己有一个意见,但还不想分享。

0 投票
0 回答
159 浏览

c++ - 使用 scoped_ptr 擦除 std::map 中的项目

使用 scoped_ptr 删除 std::map 中的项目是否安全?丽乐,

谢谢!

0 投票
1 回答
618 浏览

c++ - 为什么 boost::scoped_ptr 或 std::unique_ptr 不可复制?

boost::scoped_ptr中,说“它提供了一个基本的‘资源获取即初始化’设施,没有共享所有权或所有权转移语义。” 它是通过一些不可复制的机制完成的。

我的问题是为什么不需要共享所有权?

这就是我的意思:

现在好了,无论是否引发异常, my_p 都将被删除。因此,当代码超出 foo 的范围时 ...my_scope_ptr p 析构函数被调用,删除 my_p 并将 my_p 设置为 null。现在再次调用 my_scope_ptr q 析构函数删除 my_p ,此时它为空。在销毁时,我似乎不太关心剩余的复制指针是否指向有效对象。

那么,为什么我需要关心 my_scoped_ptr 不应该是可复制的呢?如果 ptr 负责删除指向的对象,一旦它退出范围,我认为 ptr 是可复制的没有任何危害。??!!

0 投票
1 回答
306 浏览

c++ - 使用 boost 侵入式指针初始化数组的最 STLish 方式

我有这个:

什么是初始化数组的最干净、更 STLish 的方法。请注意,代码对性能很敏感,不能选择使用向量。