- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我做了 a Qt library它建立在像 QSharedDataPointer
这样的长期抽象之上和 QSharedData
.所以当我需要一个普通的共享指针时,使用 QSharedPointer
是有意义的。为了一致性。
我现在在 C++11 项目中使用它。为了使代码更标准,我切换到 shared_ptr
用于其所有本地子系统。
库本身内的 C++11 依赖项不一定是理想的,因此感觉您应该能够选择要使用的共享指针类型。作为继续前进的第一步,我尝试了 Flexibility of template alias in C++0x 中建议的这种方法。 (无可否认,C++11 依赖本身,但我可以在非 C++11 构建中通过编译器标志使用预处理器)
#if THINKERQT_USE_STD_SHARED_PTR
#include <memory>
template<class T>
using shared_ptr_type = std::shared_ptr<T>;
#else
#include <QSharedPointer>
template<class T>
using shared_ptr_type = QSharedPtr<T>;
#endif
不幸的是,指针类为方法选择了不同的名称。值得注意的是,访问包含的指针是由 .get()
完成的。在 shared_ptr 和 .data()
在 QSharedPointer 中。
我打算做一个提取器,某种 shared_ptr_type_get<>
但随后注意到可以通过以下方式有效地实现相同的事情(在包含的指针不为空的情况下,我可以通过 bool 强制测试是否为空):
&(*ptr)
如果您正在阅读代码,这会有点减速,有人可能会尝试优化这种东西(然后很快发现这是行不通的)。但除了 WTF 因素之外,它似乎是无害的……是吗?
最佳答案
我也在我的一个项目中使用它,除了您已经注意到的可读性之外,使用它没有任何问题。正如 Mike Seymour 指出的那样,您应该始终首先检查 ptr 是否不是空指针。
我在大多数情况下使用以下成语:
if( shared_ptr_type ptr = funcReturnsSharedPtr() )
{
funcAcceptsRawPtr(&*ptr);
}
无论您为 shared_ptr_type
使用哪种共享指针类型,都可以保证它会正确编译和运行,因为任何合理的共享指针类都会重载 operator*
.
关于c++ - 泛化共享指针和 QSharedPointer::data() vs shared_ptr::get()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11150225/
我有一个名为 Message 的树节点类,如下所示: class Message { public: using Ptr = QSharedPointer; public: expli
与哑指针不同,我希望我可以在函数的堆栈上创建一个 QSharedPointer,然后将其作为返回值返回以分配给另一个 QSharedPointer同类型的吧?通常,这样的指针会指向现在超出范围的内存,
在 Qt 4 中我有以下数组: QSharedPointer encrypted(new unsigned char[RSA_size(publickey)]); 如何使用新的 Qt 5 create
我有QVector > DataVec作为大型面向对象项目中一个类的一个领域。程序在代码部分循环执行期间发生内存溢出,其中分配了大内存,由 QSharedPointers 控制。 在程序运行周期中,D
我已经围绕 QTextEdit 编写了一个包装器,以便像使用 QIODevice 一样使用它。我希望能够对同一个 QTextEdit 使用多个包装器,因此我可以对每个包装器使用不同的文本颜色。 为了使
关于如何使用QSharedPointer 对象作为方法参数或方法的返回值,有什么好的做法或规定吗? 按值: LMNode::setParent(QSharedPointer parent) {
我有 C# 背景,但仍在研究 C++ 和 Qt 智能指针。这应该是一个基本问题: 在myClass.h中 QSharedPointer m_flags; 在 myClass.cpp 中,我试图设置(是
我需要使用 QSharedPointer 进行引用计数,但我将在单线程应用程序中使用它,所以我不希望线程安全开销(我认为这是相当贵)。 有没有办法关闭线程安全,或者是否有一个只提供引用计数的等效 Qt
我目前有这样的东西: QSharedPointer Qsharedfoo; 现在我有一个指向 foo 的原始指针,也称为 rawfoo。我怎样才能让 foo point 拥有原始指针并开始指向它。我知
我写了一个小的示例应用程序代码如下。 #include #include #include class INav { public: virtual int getdata() = 0;
我现在有这样的东西 QSharedPointer cv; 这个共享指针用作 cV = QSharedPointer(new QMainWindow(p)); cV->setAttribute(Qt::
我在 Qt 应用程序中有一些间歇性的段错误。我认为问题与我们(错误)使用 QSharedPointer 有关。 Qt Documentation states : QSharedPointer::QS
这几天一直在尝试理解共享指针,但感觉我似乎无法理解。不确定是不是太明显了还是太复杂了。首先,谁能给我一个实际使用共享指针的例子。维基百科上的例子对我来说毫无意义。以及如何将共享指针传递给另一个函数或创
由于历史原因,我使用QSharedPointer在我的软件中。在某些时候,我们想要存储 boost::shared_ptr指向相同的数据,并且应该使 QSharedPointer 的实例保持事件状态.
我的应用程序包含几个这样的函数: void SomeClass::set_data_provider(DataProvider *data_provider) { connect(data_p
我有两个 QSharedPointer,我可以使用 operator== 来检查它们是否指向同一个对象 QSharedPointer1 == QSharedPointer2 或者我必须写 QShare
我正在使用 Qt 4.7.4(64 位)开发一个 gui proram。我已尝试按如下方式隔离问题: 我有一个窗口:class PreferencesWindow : public QMainWind
问题是,我有一个 QSharedPointer 的 QVector,我想将它们的一部分放入我的 QCache。如何插入指向 QCache 的共享指针?如果我将指针设置为缓存但销毁了 QVector 和
我是 Qt 的新手,在信号内传递 QSharedPointer 时遇到了一些问题。我正在使用两个线程(UI 和一个 worker)。工作人员使用包含自定义 QObject 的 QSharedPoint
在我的项目中,我创建了 QObject 实例并赋予它们父子关系。我还想用 QSharedPointer 实例跟踪一些对象。 当通过delete childObject; 或delete parentO
我是一名优秀的程序员,十分优秀!