复制C++中的构造函数,以便以后在函数中使用
Copy constructor in C++ for later use in a function
我浏览了不同的线程,很难理解如何使用复制构造函数。
如果我想操作我的类,但需要有原始值,我必须创建一个副本。
class object {
public:
int member[5][5];
object(object&); <-- how do we create a copy here?
void manipulate() {
<<-- how do I call it here?
}
};
我一直在尝试不同的东西,比如object copy = object(object&)
,但它不起作用。
object(object&); <-- how do we create a copy here?
一个简单的方法是省略声明,并让C++编译器为您完成这项工作。由于您的对象不在其构造函数的主体中分配资源,C++可以为您处理创建复制构造函数。
<<-- how do I call it here?
像这样:
object copy(*this);
... // Manipulate it here
object( const object &obj )
{
for ( size_t i = 0; i < 5; i++ )
{
for ( int j = 0; j < 5; j++ )
{
member[i][j] = rhs.member[i][j];
}
}
}
或者你可以简单地写
object( const object &obj ) = default;
因为你的复制构造函数没有做什么特别的事情。
至于它的使用,那么你可以按照以下方式使用
object one;
onject two( one );
或
object one;
onject two = one;
甚至作为
object one;
onject two { one };
或
object one;
onject two = { one };
还要考虑的是,如果您显式定义了复制构造函数,那么如果需要,您应该显式定义默认构造函数。
由于不能使用编译器生成的副本构造函数,因此通常会创建副本构造函数。在这种情况下,您通常会逐一复制每个成员。
例如(动态编写-不确定它是否会在编译时出现错误/警告)
class A
{
public:
A();
A(const A& src)
{
m_array = (char*)new char[src.m_arraySize];
memcpy(m_array, src.m_array, src.m_arraySize);
m_arraySize = src.m_arraySize;
}
private:
char* m_array;
int m_arraySize;
};
相关文章:
- "error: no matching function for call to"构造函数错误
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 选择要调用的构造函数
- 如何委托派生类使用其父构造函数?
- makefile对我的名称空间对象/函数/构造函数的不确定引用
- 没有可调用的匹配函数(构造函数),候选函数不同于对给定类型的引用
- C++库制作,隐藏在标头中没有友元的析构函数/构造函数
- 从另一个成员函数/构造函数调用C++构造函数是否执行初始值设定项列表
- 在另一个函数/构造函数 [C++] 中初始化后使变量只读
- std::调用函数时找不到函数构造函数
- 显式调用基类析构函数/构造函数合法吗
- 函数构造函数和nullptr
- 用委托构造函数构造函数
- 虚函数构造函数和调用虚函数时会发生什么
- 一些Qt函数/构造函数参数的内存管理
- 使用for_each或std::transform时,c++函函数构造函数是如何被调用的?
- std函数构造函数初始化