声明类的变量而不创建它的实例
Declare a variable of a class without creating an instance of it
我正在学习C++。
我想声明一个变量而不创建它的实例。
MyClass variable;
// More code
int main(int argc, char **argv)
{
// More code
variable = MyClass(0);
// More code
}
如果我这样做,并且MyClass
只有一个构造函数声明MyClass::MyClass(int value)
它就会失败。
我需要将其设置为全局,因为我将在 CallBack 函数上使用它,并且可以将该变量作为参数传递。
而且,我不想在声明变量时创建类的实例,然后在使用构造函数时创建另一个实例。我想我在浪费资源和 CPU 时间。
是否可以在没有实例的情况下声明一个变量?
使用指针延迟实例化。首选智能指针而不是原始指针,这样您就不必担心手动内存管理。
#include <memory>
std::shared_ptr<MyClass> variable;
// More code
int main(int argc, char **argv)
{
// More code
variable = std::make_shared<MyClass>(0);
// More code
}
是使用 std::unique_ptr
还是std::shared_ptr
取决于您计划对指针执行的操作。
std::optional
:
#include <optional>
std::optional<MyClass> variable; // not initialized
int main() {
if (variable) {
// enters this if only when initialized
}
variable = MyClass(0);
// Access the contained value:
MyClass value = *variable;
int member = variable->member;
}
std::optional
类型在 C++17 中可用。如果您的项目被限制为旧版本,则始终可以使用 polyfill
我不确定,但似乎您已经创建了一个构造函数,例如:
MyClass(int v) : value(v) {}
而不是编写默认构造函数,它可能看起来像:
MyClass() {}
因此,编译器在编写以下内容时找不到实例化 MyClass 对象的构造函数:
MyClass variable;
简而言之,当您编写了其他构造函数但还想使用默认构造函数时,您必须显式编写默认构造函数。
而且你的问题有点模糊,当你像上面这样声明一个类的变量时,你确实在创建它的实例。即使这样做
variable = MyClass(0);
您正在创建 MyClass 的临时对象,然后使用赋值运算符将其分配给变量对象。
当你声明它时,你可以用现有的构造函数用一些临时值初始化变量。理想情况下,使用调试时可以轻松识别的值。
MyClass variable(-1);
尽管这样添加执行此操作的默认构造函数可能更有意义。
我想声明一个变量而不创建它的实例。
在您的代码中,您有:
MyClass variable;
在全局命名空间中声明。这里的变量仍然是 MyClass 的一个实例;它只是具有与功能内不同的存储、链接和寿命。
至于在全局命名空间中声明它并在之后对其进行初始化这是我尝试过的,它似乎对我有用。我不确定这是否是你所追求的,但我认为这可能对你有用。
#include <iostream>
class MyClass {
private:
int value_;
public:
MyClass() : value_{ 0 } {}
explicit MyClass(int value) : value_{ value } {}
MyClass& operator()(int value) {
value_ = value;
return *this;
}
int value() const { return value_; }
};
MyClass myClass;
int main() {
std::cout << myClass.value() << 'n';
myClass = MyClass(2) << 'n';
std::cout << myClass.value() << 'n';
myClass(5);
std::cout << myClass.value() << 'n';
std::cout << myClass(8).value() << 'n';
return 0;
}
输出
0
2
5
8
让我知道你的想法。
- 在C++中为链表类创建实例
- 在 C++ 中在堆栈上创建实例时如何保持多态性?
- 如何使用Qt在D-Bus上创建/实例化配对代理
- 共创建实例消耗高 CPU
- 从与"this"相同的模板创建实例?
- 如何在不创建实例的情况下获取类的方法成员的类型?
- 创建实例化所有其他类和子系统的类的目的是什么
- 我怎么可能从尚未定义某些成员方法的类创建实例?(C++)
- godot的NetSocket如何创建实例?
- VULKAN创建实例vk_out_of_host_memory
- 如何推动在LUA脚本上使用的现有/创建/实例化类对象
- 为什么不能在不创建实例的情况下使用多态类
- 共同创建实例在 32 位上崩溃
- 创建实例时静态变量的地址
- 使用虚拟函数创建实例,为什么
- ADO 连接创建实例在 Windows Server 2003 上失败
- 使用函数中的复制构造函数创建实例的副本,该函数获取作为基对象传递的实例
- 如何从字符串中存储的类型创建实例
- ccomptr _appdomain 创建实例返回系统找不到指定的文件
- 创建实例化类数组 - 语法