不同的构造函数方式
The different constructor ways
我写了小类,现在我看到了调用构造函数的不同方法。哪种方式是正确的?(或更好的方法)
共享密钥.h
#ifndef SHAREDKEYS_H
#define SHAREDKEYS_H
class SharedKeys
{
private:
char keyCode;
public:
SharedKeys(char keycode)
{
keyCode = keycode;
}
~SharedKeys() {}
char getKeyCode() { return keyCode; };
};
#endif
主.cpp
我的构造函数调用方式:
SharedKeys* SK;
SK = new SharedKeys(*cstr); //Call contructor
其他构造函数调用方式:
// SharedKeys constructor
SharedKeys::SharedKeys(*cstr)
{
keyCode = keycode;
}
我愿意接受任何改进建议。谢谢。
主.cpp
SK一定是这里的指针还是?(此代码有效)
SharedKeys* SK;
vector<SharedKeys> StoreSharedKeys;
string str = x;
char *cstr = new char[str.length() + 1];
strcpy(cstr, str.c_str());
SK = new SharedKeys(*cstr);
StoreSharedKeys.push_back(*SK);
delete[] cstr;
我理解正确吗?
cout << "Key: " << x << " loaded." << endl;
string str = x;
char *cstr = new char[str.length() + 1];
strcpy(cstr, str.c_str());
SharedKeys SK(*cstr);
StoreSharedKeys.push_back(SK);
delete[] cstr;
如果我看到正确,那么这个构造器调用是正确的方法。所以我不必删除对象。正确?
第二个"调用"根本不是调用。
这是一个类外的定义。类的方法(包括构造函数和析构函数)可以在类的主体内部或外部定义。如果方法在类外部定义,则仅在类内声明它们。
使用类外定义的一个重要原因是,您可以将类定义放在头文件中,并将方法定义放在.cpp文件中。
有两种方法可以创建对象:
SharedKeys sk( 'a');
SharedKeys* sk_ptr = new SharedKeys( 'a');
第一行在堆栈上创建一个对象,当它超出范围(例如功能结束)时,它将被删除。
第二行动态创建一个对象,一旦离开范围,该对象将不会被删除。您必须手动删除它,使用delete
.或者,更好的是,使用智能指针。
选择哪种方式创建对象取决于用例、对象的大小(应始终动态分配大型对象)、对象的生存期等。但这两种方法最终都调用了相同的构造函数。
问题可能出在形式上 可以在没有动态分配内存的情况下编写构造函数
SharedKeys SK(*cstr);
或与:
SK = new SharedKeys(*cstr);
我看到的第二件事...你看的例子
#include <iostream>
void function(char a, int lenght)
{
std::cout << a << std::endl;
// for (int i = 0; i < lenght; i++) printf("%c ", a[i]);
}
void function2(char *a, int lenght)
{
for (int i = 0; i < lenght; i++) printf("%c ", a[i]);
}
int main()
{
char tab[2]{ 'a','b' };
// function(tab,2);
function(*tab,2);
// function2(tab,2);
// function2(*tab,2);
return 0;
}
您的生产线
SK = new SharedKeys(*cstr);
这一行只给构造函数第一个元素数组,我认为它不像你想要的。如果你想给出数组字符,你应该使用来自function2
的formule(来自示例)。
编辑: 是的,您必须删除对象,
delete[] cstr
和
delete SK
相关文章:
- 请描述一下在 c++ 中在此类中定义构造函数的方式?
- 用初始化列表和超类构造函数声明子类构造函数的正确方式
- 以支持继承的方式将自身shared_ptr添加到对象构造函数中的向量中
- 不同的构造函数方式
- 在C 中超负荷构造函数的合适方式是什么
- 矩阵类编写构造函数,解构器和复制构造函数的方式
- 由于您可以在C 中以两种方式声明复制构造函数,这是正确的方式
- 如何使用构造函数以类似的方式初始化"对象数组"
- 构造函数的快捷方式
- 编写有条件可选构造函数的最佳方式
- 定义构造函数的两种不同方式
- 复制构造函数快捷方式
- 以不同方式实现可变参数构造函数的模板类:每个版本的优点和缺点是什么
- RAII 在两个构造函数之间进行选择的方式
- 如果在构造函数中使用宏,它可以以不同的方式扩展吗?
- 继承顺序C++以何种方式影响构造函数
- 转换构造函数的实际工作方式
- 将指针/引用传递到构造函数中现有对象的首选方式是什么
- 以最紧凑的方式调用默认(AKA无参数)构造函数
- 子类如何调用以不同方式初始化成员变量的父类的构造函数?[C++]