C++ C或C+中的结构实例限制+;

C++ C或C+中的结构实例限制+;,c++,c,struct,C++,C,Struct,我们可以将结构实例限制为仅一个。 i、 e.如果我们写struct student s1,s2,则应给出错误。 这意味着struct student s1应该是允许的。 我们能在C或C++中这样做吗? 是的。您可以以类样式作为单例创建结构。 考虑下面的例子: struct student{ char name[20]; in roll; }; int main() { struct student s1; } 当然,如果您不想在第二次创建时返回指向现有实例的指针,您可

我们可以将结构实例限制为仅一个。 i、 e.如果我们写
struct student s1,s2,则应给出错误。
这意味着
struct student s1应该是允许的。

我们能在C或C++中这样做吗? 是的。您可以以类样式作为单例创建结构。 考虑下面的例子:

struct student{
    char name[20];
    in roll;
};

int main()
{
    struct student s1;
}

当然,如果您不想在第二次创建时返回指向现有实例的指针,您可以在那里实现一些异常抛出/其他错误消息。

答案取决于语言(您标记了
C
C++

C
中,如果结构定义已知,则不可能。您可能能够实现一个只暴露指向结构的指针的封装模块,但这样的实现可能相当有限。对于插件系统,这可能是有用的

C++
中,您可以通过
Singleton
模式隐式执行此操作。但是,这不会阻止您拥有多个变量,如示例所示,它只会确保所有这些变量都使用同一个实例。它也不会出现错误,至少不会出现编译错误。不过,您可能会抛出运行时错误

我们可以将结构实例限制为仅一个吗

当然可以:不创建另一个实例


限制类的实例数量通常不是您想要的。
不,完全是你。

你要找的术语是“单身”。有很多方法可以实现这样的目标,但你可能不想。为什么要这样做?对名为“student”的结构进行此限制似乎有些奇怪,但singleton(正如molbdnilo所说)是您要寻找的对象。在C.@OliCharlesworth anonymous struct中无法实现这一点?
singleton&GetInstance(){static singleton instance;return instance;}
是编写单例的惯用且正确的方法。@Simple我见过几十个单例,我从未听说过这种“正确的方法”,你能给我指一些文献吗?如果使用C++11支持的编译器,
=delete=delete
函数,你想让它们不可用(或者至少让它们没有实现,这样它们就不能被调用),那么code>比声明ctors&co private更好。@NiRR:这是Meyer的单例,在C++11中甚至是线程安全的。你可以将构造函数
设为private
,使用单例生成函数a
friend
。但不要说这是个好主意。
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;
    }
}