আমাকে জানানো হয়েছিল যে নীচের কোডটিতে সি ++ ২০ অবধি নির্ধারিত আচরণ রয়েছে:
int *p = (int*)malloc(sizeof(int));
*p = 10;
এটা কি সত্যি?
যুক্তিটি ছিল যে int
বস্তুর আজীবন তার মান নির্ধারণের আগে শুরু করা হয়নি ( P0593R6 )। সমস্যা সমাধানের জন্য, অবস্থান new
ব্যবহার করা উচিত:
int *p = (int*)malloc(sizeof(int));
new (p) int;
*p = 10;
আমাদের কি সত্যই কোনও ডিফল্ট কনস্ট্রাক্টরকে কল করতে হবে যা অবজেক্টটির জীবনকাল শুরু করতে তুচ্ছ?
একই সময়ে, কোডটি খাঁটি সি তে অপরিজ্ঞাত আচরণ করে না তবে, আমি যদি int
সি কোডে একটি বরাদ্দ করে সি ++ কোডে ব্যবহার করি তবে কী হবে?
// C source code:
int *alloc_int(void)
{
int *p = (int*)malloc(sizeof(int));
*p = 10;
return p;
}
// C++ source code:
extern "C" int *alloc_int(void);
auto p = alloc_int();
*p = 20;
এটি কি এখনও অপরিবর্তিত আচরণ?
int
? নাstd::string
? হ্যাঁ.