簡體   English   中英

沒有零參數構造函數的初始化靜態類對象C ++

[英]Initializing static class object with no zero argument constructor c++

我的代碼的相關部分如下:

在foo.h中:

namespace foo_ns {
class Foo
{
    static Class1 object1;
};
}

在foo.cpp中

#include <foo.h>
namespace foo_ns {

Class1 Foo::object1(/*another object. Need to call copy constructor*/)

}

在這里,“另一個對象”在main()定義。 此外,Class1是大型庫的一部分,並且沒有零參數構造函數,因此簡單地刪除括號就no matching function call在編譯期間產生no matching function call錯誤。 據我了解,靜態初始化必須在任何功能之外執行。

那么,這有什么解決方法嗎?

當然,如果Class1具有稍后可以使用的方法,那么一個簡單的解決方案是:

Class1 Foo::object1(some_rubbish);

// in main
object1 = Class1(the_real_initializer);

如果Class1沒有有效的賦值運算符,但是可以安全地銷毀並重新創建它,則可以使用main編寫:

object1.~Class1();
new(&object1) Class1(the_real_initializer);

盡管如果此構造函數拋出該異常,則必須中止該程序。


如果無法在程序結束之前正確銷毀Class1 ,則必須推遲其初始化,例如:

static std::unique_ptr<Class1> p_object1;

然后總的來說,當你准備好了,

p_object1.reset( new Class1(bla bla bla) );

這樣,您將必須更改訪問object1.任何其他代碼object1. 改為使用p_object1->

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM