c++ - 我需要复制构造函数吗?以及如何使用复制构造函数将 const 对象复制到非 const 对象

标签 c++ constructor copy constants

目标:我必须将一个对象复制到另一个对象中。

我想在不使用赋值或复制构造函数的情况下复制它,但它无法编译。所以我使用了复制构造函数/赋值运算符。

问题
. 现在我有 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中的Home_instance_p_

关于c++ - 我需要复制构造函数吗?以及如何使用复制构造函数将 const 对象复制到非 const 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21284896/

相关文章:

c++ - 将 QGraphicsItems 附加到 QGraphicsItemGroup 会导致崩溃

c++ - 我如何在不使用“using namespace std; 的情况下使用 _getch()?

c++ - 如何使用在子构造函数中创建的对象构造父类

c++ - operator <= 重载 2 个类并转换 ctor

Java递归文件复制优化

sql - Postgresql - 无法将 csv 文件加载到表中

c++ - 将文件的一部分读入 std::vector<char> 的有效方法?

c++ - c 和 c++ 之间关键字 static 的不同含义是什么?

php - 构造函数返回一个对象,而不是一个值

deployment - Capistrano 3 通过副本部署