Q:

Singleton file static vs class private static

Is there any difference or specific advice when it comes to the following approaches for defining singletons?  
In 1, the singleton object is a class private static, but in 2, it's a file static. 
Note: m_initedObj1 is just there to show that class has state, and use case is to call this singleton->DoSomething() many times, without needing to init this object again. 
1)
// header file
class Foo {
private:
    static Foo* s_fooSingleton;
    Foo();
    Obj1 m_initedObj1;

public:
    static Foo* Singleton();
    static void ClearSingleton();
    Bar DoSomething(...);
};

// cpp file
Foo* Foo::s_fooSingleton = nullptr;
Foo::Foo() { m_initedObj1 = InitObj1Somewhere(); }

/*static*/ Foo* Foo::Singleton()
{
    if(!Foo::s_fooSingleton)
        Foo::s_fooSingleton = new Foo();
    return Foo::s_fooSingleton;
}

/*static*/ void Foo::ClearSingleton()
{
    if(Foo::s_fooSingleton)
        delete Foo::s_fooSingleton;
    Foo::s_fooSingleton = nullptr;
}

Bar Foo::DoSomething(...) { // do something }

2)
// header file
class Foo {
private:
    Foo();
    Obj1 m_initedObj1;

public:
    static Foo* Singleton();
    static void ClearSingleton();
    Bar DoSomething(...);
};

// cpp file
static Foo* s_fooSingleton = nullptr;

Foo::Foo() { m_initedObj1 = InitObj1Somewhere(); }

/*static*/ Foo* Foo::Singleton()
{
    if(!s_fooSingleton)
        s_fooSingleton = new Foo();
    return s_fooSingleton;
}

/*static*/ void Foo::ClearSingleton()
{
    if(s_fooSingleton)
        delete s_fooSingleton;
    s_fooSingleton = nullptr;
} 

Bar Foo::DoSomething(...) { // do something }

A:

As JerryGoyal states in the comments, in 2) other methods in the same .cpp file can modify s_fooSingleton.  
On the other hand, they are not both thread-safe.  If you don't really mind the clearing (calling ClearSingleton() explicitly), just go with the Scott Meyers' version.  Otherwise, go with the double checked locking version.  
It's really hard to ensure the safety in case of explicitly deleting.  You always have to check whether it's deleted before you access it.  If it's a multi-threaded executable, checking and using it must be atomic, because it can be deleted just after checking.  
Double checked locking could be used to create and delete the singleton, which ensures you that there is only one instance at a time.  Yet, it does not ensure the object really exist, since you may accidentally delete it. 
You may use smart pointers to count references and delete it if no references exist. 
Or even better, see this answer https://stackoverflow.com/a/15733545/1632887. 
I just wouldn't delete it explicitly if I were you!