- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我必须为类编写一个共享指针,它必须做的许多其他事情之一就是确保它可以删除它指向的对象。
我如何编写一个解决方案来处理具有 protected 析构函数的对象?
此外,如果对象是使用 placement new 创建的,我不应该调用 delete
在对象上,因为该空间可能仍在使用中(delete
调用是否有效?)。如何检测此类情况?
规范的相关部分:
void reset();
The smart pointer is set to point to the null pointer. The reference count for the currently pointed to object, if any, is decremented.Sptr(); Constructs a smart pointer that points to the null pointer.
template <typename U>
Constructs a smart pointer that points to the given object. The reference count is initialized to one.
Sptr(U *);
Sptr(const Sptr &);<br/>
template <typename U> Sptr(const Sptr<U> &);
The reference count is incremented. If U * is not implicitly convertible to T *, this will result in a syntax error. Note that both the normal copy constructur and a member template copy constructor must be provided for proper operation.
代码的调用方式:
Sptr<Derived> sp(new Derived);
char *buf = (char *) ::operator new(sizeof(Sptr<Base1>));
Sptr<Base1> &sp2 = *(new (buf) Sptr<Base1>());
sp2 = sp;
sp2 = sp2;
sp.reset();
sp2.reset();
::operator delete(buf);
Base1
一切都受到保护。
最佳答案
使析构函数成为非公开的全部意义在于防止对象被任意销毁。没有很好的方法来解决这个问题。 (即使有通用方法,也不是好方法,因为它需要打破封装才能做到这一点。)
如果你想让一个对象被除它本身之外的某个类销毁,请将析构函数公开。如果不这样做,那么您的指针类也将无法销毁该对象。
或者,您可以使指针类成为您希望它使用的任何类的友元。但这在很多方面都很丑陋,尤其是它相当武断地限制了您可以使用它的有效对象类型。
关于c++ - 删除具有 protected 析构函数的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13571968/
我开始考虑在我 future 的项目或重构中实现控制反转容器,我想知道在正确设计依赖项时哪些原则(除了 GoF 模式)可能需要牢记在心。假设我需要构建一个简单的控制台应用程序,如果它可以访问互联网,它
假设我有一个 RxC contingency table 。这意味着有 R 行和 C 列。我想要一个维度为 RC × (R + C − 2) 的矩阵 X,其中包含行的 R − 1 “主效应”以及列的
我正在尝试使用 DKMS 为正在运行的内核 (4.4) 构 build 备树覆盖。我天真的 Makefile 如下: PWD := $(shell pwd) dtbo-y += my-awsome-o
我有一个 sencha touch 项目。我是用 phonegap 2.9 构建的,并且可以正常工作 device.uuid 返回到设备 ID。当我尝试使用 3.1 device.uuid 构建时抛出
我在安装了 Xcode 4.5.1 的 Mt Lion 上运行。 默认情况下,当我构建并部署到 iOS 5.1 设备时,显示会在我旋转设备时旋转,但当我部署到 iOS 6 模拟器或运行 iOS 的 i
我正在尝试使用 Google Analytics Reporting API v4 构建多折线图。 一张图表,其中我按每天的 session 计数为每个设备(台式机/平板电脑/移动设备)设置了一条线。
我一生都无法使用 xcode 组织者“自动设备配置”中的“团队配置配置文件”在 xcode 4.0.1 中将我的应用程序构建到我的 iPad 上。 该应用程序完美地构建到模拟器,但当我构建到 iPad
我是一名优秀的程序员,十分优秀!