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

c++ - 带有 boost scoped_ptr 的 C++ 多态性

为什么以下代码不允许调用 foo(ptr) ?

我们传递引用的相应表单按预期工作。我们不应该用 boost scoped_ptr 做多态性吗?

带有 boost 1.49 的 g++ 给了我:

0 投票
5 回答
5823 浏览

c++ - 构造函数中抛出异常时未调用析构函数

为什么这段代码没有调用析构函数?

编辑

从答案中可以看出,当构造函数发生异常时,不会调用析构函数。但是如果异常发生在main()中,即MyClass对象被完全实例化后,会调用MyClass的析构函数吗?如果不是,那为什么它是智能指针?

添加代码

输出:

0 投票
5 回答
3814 浏览

c++ - 关于 shared_ptr、scoped_ptr 和 shared_array 的一些问题

我对 boost 库中实现的智能指针有一些疑问。shared_ptr 和 scoped_ptr 之间的唯一区别是 scoped_ptr 没有复制构造函数而 shared_ptr 有吗?当对象不调用复制构造函数时,我是否应该始终使用 scoped_ptr 而不是 shared_ptr?我也不明白共享/范围数组的想法。我不能只使用 std::vector 代替它吗?

0 投票
1 回答
210 浏览

c++ - scoped_ptr 中对象的快速分配?

既然scoped_ptr保证给定线程中的所有对象都以类似堆栈的方式分配,那么为 下的对象指定“自定义堆”最不痛苦的方法是scoped_ptr什么?
(例如对于vectors、deques、strings 等)

(这将使我们几乎完全避免传统的堆开销,得到一个几乎与堆栈一样快但与堆一样大的池。)

0 投票
1 回答
223 浏览

c++ - _BLOCK_TYPE_IS_VALID error on boost::scoped_array

After a huge amount of digging and searching I found the root of my problem. In essence this code is executed and, in its own project it causes the same error. I see that I cannot reset a smart pointer to a new string...but why? Also is there a simple way around this?

EDIT -

I think I've figured it out. While resetting, the smart pointer tries to delete and empty character array ("") which, because the new operator was not used, was not allocated on the heap (ahem !!?!!?!???!?!). Therefore this program will break miserably when it tries to deallocate the memory. So correct me if I'm wrong but would the string itself be stored in the program's executable byte stream itself? If so, just for future reference, is there a way to force the allocation of a new string?

0 投票
4 回答
629 浏览

c++ - 在简单的情况下使用 scoped_ptr 是不是有点矫枉过正?

我在这样的小函数中使用 scoped_ptr。这样我就不必调用删除。这是这种用法的过度杀伤力吗?我的团队成员更喜欢原始指针和删除。如果碰巧在非常关键的路径中使用 scoped_ptr,使用它的成本是多少?这不应该是内联的并且完全等同于在优化的二进制文件中使用普通删除吗?

0 投票
4 回答
5476 浏览

c++ - 为什么提升范围内的指针

作用域指针的目标是什么?据我了解,作用域指针管理代码块中的内存。如果我想在一个块中声明一个变量,我可以在堆栈上声明它而不用担心清理。

0 投票
3 回答
3862 浏览

c++ - 为什么 boost 没有 make_scoped()?

Boost 的make_shared()函数在尝试创建shared_ptr.

为什么没有make_scoped()等价物?有共同的最佳实践吗?

boost::scoped_ptr这是文档中对我来说似乎不安全的代码示例:

这行代码将按顺序完成这三件事:

  • 分配堆内存为Shoe
  • 调用构造函数Shoe
  • 调用构造函数boost::scoped_ptr<Shoe>

如果 for 的构造函数Shoe抛出异常, 就会导致内存泄漏。 (请参阅 R. Martinho Fernandes 的回答)scoped_ptr不会处理释放,因为它尚未构建。

这是疏忽吗?或者有没有我没有注意到的解决方案?

0 投票
2 回答
380 浏览

boost - 通过 CRTP 基于基类中的 boost 智能指针为派生类成员分配内存

这部分问题提供了背景信息,可以忽略

我正在开发一个模板库,该库严重依赖于奇怪重复的模板模式的使用。类结构背后的想法是用户可以

1)。使用带有标准方法的预定义类。这些类是基类的非常简单的叶子,仅提供构造函数/析构函数,声明变量成员并将基类声明为友元。对派生类的变量成员进行操作的所有方法都在基类中定义。

2)。使用基类创建他/她自己的扩展。这种方法还允许用户引入他们自己的方法来操作相同的变量成员。

设计仅强制执行单级继承。

我的问题主要是关于第 2 条。在当前的实现中,用户必须隐式定义所有构造函数(即描述类的动态变量成员的内存分配的完整过程等)。

问题

下面的示例演示了对使用 CRTP 在基类构造函数中提供派生类的堆变量的内存分配定义的可能性的调查。

基类的一部分

派生类:

主要的:

该代码产生以下输出:

输出表明该概念可能是可行的。但是,我有两个问题。

1)。我想确保我了解代码执行期间发生的所有过程。特别是,我对流程的效率感兴趣,因为我可能需要从上面介绍的类中实例化大量对象,并且我想了解会发生什么Point(是否有任何隐藏的重新定义?)

2)。这个问题与使用库boost为派生类的成员定义智能指针有关。当我尝试用 替换原始指针时boost::shared_ptr,在尝试通过基类为派生类的成员分配内存时收到分段错误错误。代码的重要部分如下所示。

基类的一部分:

部分派生类:

主要的:

该代码产生以下输出:

我也试过了scoped_ptr。但是,它在运行时失败,但出现了不同的错误:

我假设它与boost智能指针的操作细节有关。有谁知道如何解决这个问题?

0 投票
3 回答
4675 浏览

c++ - 应使用哪个标头来使用 scoped_ptr

我想在我的 C++ 应用程序中使用智能指针。

为了使用 std scoped_ptr,我应该包含哪个头文件?