如何在我的构造函数中将shared_ptr初始化为QTextCodec

How to initialize a shared_ptr to a QTextCodec in my constructor?

本文关键字:ptr 初始化 QTextCodec shared 我的 构造函数      更新时间:2024-09-28

我正在尝试在类构造函数中将shared_ptr初始化为QTextCodec(用于字符集转换的Qt类(。

这是我获得"虚拟QTextCodec::~QTextCodec(("的代码,在该上下文中受到保护错误:

myencoder.h

#ifndef MYENCODER_H
#define MYENCODER_H
#include <memory>
#include <QTextCodec>
class MyEncoder
{
std::shared_ptr<QTextCodec> m_codec;
public:
MyEncoder(QString &aCodec);
};
#endif // MYENCODER_H

myencoder.cpp

#include "myencoder.h"
MyEncoder::MyEncoder(QString &aCodec)
{
m_codec = std::shared_ptr<QTextCodec> (QTextCodec::codecForName(aCodec.toLatin1()));
}

如何在MyEncoder的构造函数中初始化m_codec属性?

来自文档:

QTextCodec::~QTextCodec ( )     
protected virtual

销毁QTextCodec。您不应该删除编解码器。一旦被创造出来,他们的一生就成了CopperSpice的责任。

与合并版本相同:

QTextCodec::~QTextCodec()               
[virtual protected]

销毁QTextCodec。请注意,您不应该自己删除编解码器:一旦创建,它们将成为Qt的责任。

所以,也许可以将空的deleter添加到shared_ptr中,或者使用原始指针并将其留给库。