Ben bir otomatik değişken olarak kullanmasını benim sınıfının kullanıcı önlemek için istiyorum, bu yüzden böyle kod yazmak:"= default" destructor ve boş destructor arasındaki fark nedir?
class A {
private:
~A() = default;
};
int main() {
A a;
}
ben kod derlenmiş olmayacağını bekliyoruz, ancak g ++ hatasız derler . Ben kodu değiştirdiğinizde
Ancak: Artık
class A {
private:
~A(){}
};
int main() {
A a;
}
, g ++ beklentim olduğu gibi ~A()
, özel olduğuna hata veriyor.
bir "= default" destructor ve boş yıkıcının arasındaki fark nedir?
Gcc sürümü nedir? –
Okuma örn. [Bu yıkıcı referans] (http://en.cppreference.com/w/cpp/language/destructor), fark kullanıcı tarafından sağlanan yıkıcı (boş bile) * önemsiz olmayan * olduğu ve aşağıdakiler arasından olmasıdır başvuru: "Önemsiz yıkıcılara sahip nesneler bir silme ifadesi gerektirmez ve yalnızca depolama alanlarını ayırarak imha edilebilir." Senin durumunda –
her ikisi (http://coliru.stacked-crooked.com/a/41976bc03bc12c79) ilk örneği [gcc4.9 ve clang3.5 derlemeye reddeder], hiçbir fark yoktur. Gcc sürümünüzde bir hata olmalı. – Praetorian