struct student{
char name[20];
in roll;
};
int main()
{
struct student s1;
}
我们可以将结构实例限制为只有一个。
即如果我们写struct student s1,s2;
,那么它应该给出错误。
这意味着应该允许struct student s1;
。
我们可以用c或c ++这样做吗;
答案 0 :(得分:5)
答案 1 :(得分:1)
答案取决于语言(您标记了C
和C++
)。
在C
中,如果结构定义已知,则不可能。您可能能够实现一个封装模块,其中只公开指向结构的指针,但这样的实现可能相当有限。对于插件系统,这可能是有用的。
在C++
中,您可以通过Singleton
模式隐式执行此操作。但是,这不会阻止您拥有多个变量,如示例所示,它只能确保所有这些变量都使用相同的实例。它也没有错误,至少没有编译错误。您可以抛出运行时错误。
答案 2 :(得分:0)
是。您可以将类结构创建为类似于类的单例。 考虑以下示例:
struct Singleton
{
private:
static Singleton * instance;
Singleton()
{
}
Singleton(const Singleton & source)
{
// Disabling copy-ctor
}
Singleton(Singleton && source)
{
// Disabling move-ctor
}
public:
Singleton * GetInstance()
{
if (instance == nullptr)
instance = new Singleton();
return instance;
}
}
当然,如果您不想在第二次创建时返回指向现有实例的指针,则可以实现一些异常抛出/其他错误消息。