Merhaba,
Geçen sene şu tartışma içerisinde duyurusu yapılmış:
https://forum.dlang.org/post/2023.14438@ddili.org
Ama ben copy constructor'ü denemeden önce bunu anlamak için diye şöyle bir kod yazdım:
/* __postblit; Denemesi
* Tarih: 22.06.2021
*/
struct A
{
int i;
this(this)
{
import core.stdc.stdio : printf;
printf("postblit öncesi i = %d\n", i++);
}
}
import std.stdio;
void main()
{
auto a = A.init;
writeln("struct A kuruldu...");
a.__postblit;
writeln("this()'de yazıldı --^\n");
a.i.writeln("<-- main()'de yazıldı!");
/* bu satır açıldığında this()'e
writeln(a); // 4'e kere giriyor,
writefln("A(4) == %s ", a); // bu 3!
a.i.writeln(": i'nin değeri aynı!");//*/
}
Her şey olması gerektiği gibi ilerlerken, kolaylık olsun diye yapıyı ekrana yazdırırsam ne olur diye denediğimde ekrana defalarca satır yazması tuhafıma gitti:
struct A kuruldu...
postblit öncesi i = 0
this()'de yazıldı --^
1<-- main()'de yazıldı!
postblit öncesi i = 1
postblit öncesi i = 2
postblit öncesi i = 3
postblit öncesi i = 4
A(5)
postblit öncesi i = 1
postblit öncesi i = 2
postblit öncesi i = 3
A(4) == A(4)
1: i'nin değeri aynı!
Aynı çıktıyı alabilmek için gizlediğim satırları bir / karakteri ekleyerek açmalısınız. Neden böyle oluyor diye sorgulamıyorum ki zaten kullanılması önerilmiyormuş.
Ama niye writeln() 4, writef() 3 kere posblit kısmına girer gibi yapar anlayamadım. Tuhaf!
Başarılar...