我需要复制构造函数吗?以及如何使用复制构造函数将const对象复制到非const对象
do i need copy constructor ? and how copy const object to non const object using copy constructor
目标:我必须将一个对象复制到另一个对象中。
我想到了不使用分配或复制概述的情况,但没有编译。因此,我有使用复制的配置器/分配操作员。
问题
。现在我有2个问题?
1)我真的需要复制构造函数&作业操作员?据我所知,我没有在成员变量中使用任何指针,因此无需使用复制构造函数?
屁股,然后我的对象是一个指针,所以我可能需要它吗?
2)如果我的下面代码是正确的,为什么我会在下面显示错误
无法从'const home_instance *'转换为'home_instance *'
home_data.h
struct home_data
{
QString area_address_;
QVector<QString> home_numbers_;
QMap< QString, QList<QByteArray> > area_to_home_mapping;
};
Home_instance.h
class Home_instance : public QObject
{
Q_OBJECT
public:
Home_instance( const Home_data& data, QObject* parent_p = 0 );
Home_instance();
Home_instance( const Home_instance& rhs );
Home_instance& operator=( const Home_instance& rhs );
~Home_instance();
// some otehr functions
private:
Home_data data_;
}
Home_instance.cpp
//constructors
Firmware_instance::Home_instance( )
{
}
Home_instance::Home_instance( const Home_data& data, QObject* parent_p )
: QObject( parent_p ),
data_ ( data )
{}
Home_instance::Home_instance( const Home_instance& rhs )
{
data_.ip_address_ = rhs.data_.ip_address_;
data_.serial_numbers_ = rhs.data_.serial_numbers_;
data_.serial_to_slot_mapping = rhs.data_.serial_to_slot_mapping;
}
Home_instance& Home_instance::operator=( const Home_instance& rhs )
{
data_.ip_address_ = rhs.data_.ip_address_;
data_.serial_numbers_ = rhs.data_.serial_numbers_;
data_.serial_to_slot_mapping = rhs.data_.serial_to_slot_mapping;
return *this;
}
Home_instance::~Home_instance()
{
// do we actually need destructor ?
}
// in some other Dialog window say Council.h &cpp
class Council
{
// some other variable decl
private:
Home_instance* Home_instance_p_;
Home_data Home_data_p_;
}
in council.cpp
// in constructor
{
connect( udp_p_, SIGNAL( discovered_Home( const Home_instance* ) ), this, SLOT( new_Home( const Home_instance* ) ) );
}
// in function new_home
void Council::new_home( const Home_instance* Home_old_instance )
{
// bla bla
Home_instance_p_ = Home_old_instance; // error can not convert from 'const Home_instance *' to 'Home_instance *'
}
谢谢
这个
Home_instance_p_ = Home_old_instance;
不复制对象,它试图复制指针。
你想要
Home_instance_p_ = new Home_instance(*Home_old_instance);
,然后在~Council
中进行delete Home_instance_p_
。
我真的需要复制构造函数&amp;分配操作员?
通常,我会告诉你是的,但是当从qobject继承一个类时,答案是否定的。QObject类并不是要复制的。
请参阅此信息:如何复制qt中的对象?
无法从'const home_instance *'转换为'home_instance *'
是的,因为右手操作员是const指针,而左手是非const指针。有一种称为const正确性的东西,可以防止这种转换。
这回答原因:newbie问题:C const to non-Const Conversion
-
假设Qlist,Qmap和QbyTearray都有适当的复制构造函数(或可以使用合成的构造函数),您不需要一个,因为正如您所说,您没有需要深层复制的数据。但是,如果地图,列表和bytearray无法正确复制,则需要实现一个(最好的位置将在Q级内)
-
您正在尝试将指针复制到const对象为指向非const对象的指针。这与您的复制构造函数无关。您应该只从方法定义中删除const(如果委员会:: home_instance_p_需要使用来调用非const方法或使您的会员变量const)。
1)我真的需要复制构造函数&amp;作业操作员?据,直到...为止 我知道我没有在成员变量中使用任何指针,所以没有 需要使用复制构造函数?
如果没有指针,则不需要复制构造函数&amp;分配操作员。
- 将包含不可复制对象的对插入到映射中
- 通用参考 l 值不复制对象
- 为什么具有 2 个参数参数的构造函数接受复制对象作为 1 个参数参数?
- 为什么从引用创建共享指针会复制对象?
- 当(且仅当)对象具有复制构造函数时,如何复制对象?
- 我的程序运行良好,可以复制对象,但是当我使用复制分配(=)时,它仍然可以正常运行.为什么不给错误
- 如何复制对象
- 如何构造不可移动不可复制对象的元组?
- 不可复制对象数组的 consexpr 初始化?
- 提升::可选与标准::不可复制对象的可选
- 如何在C++中通过引用复制对象
- 从指针复制对象
- 删除浅表的复制对象和源对象
- 使用realloc可以安全地重新分配琐碎的可复制对象的存储吗
- C 返回复制对象
- 如何将智能指针作为类属性来复制对象
- 为什么在复制对象时忽略顶级常量
- std::shared_ptr 在复制对象时导致问题
- 安全复制对象的替代方案
- 当类包含boost::container::flat_set时,复制对象时出错