thể trùng lặp:
Why copy constructor is not called in this case?Sao chép Constructor không gọi
Hãy xem xét các chương trình mẫu dưới đây:
#include <iostream>
using namespace std;
class sample
{
private:
int x;
public:
sample(int a=0) : x(a)
{
cout << "default ctor invoked\n";
}
sample(const sample& obj)
{
cout << "copy ctor invoked\n";
}
};
int main()
{
sample s2 = sample(20); //Line1
sample s3 = 20; //Line2
return 0;
}
Trong Line1
, đầu tiên các nhà xây dựng của sample
lớp được gọi explicitly
với đối số 20. Sau đó, tôi mong đợi constructor sao chép được gọi để khởi tạo s2.
Trong dòng 2, đầu tiên hàm tạo của lớp sample
được gọi implicitly
đầu tiên với đối số 20. Ở đây tôi cũng mong đợi trình tạo bản sao được gọi để khởi tạo s2.
Trong cả hai trường hợp, hàm tạo bản sao không được gọi? Tại sao chuyện này đang xảy ra? Tôi tin rằng, có điều gì đó sai trái với sự hiểu biết của tôi về sự kêu gọi của nhà xây dựng bản sao. Ai đó có thể sửa tôi, nơi tôi đang đi sai?
Điều này được mong đợi - hãy để tôi thử và tìm một ví dụ tốt –
Các cuộc gọi đến trình tạo bản sao có thể được ưu tiên trong một số trường hợp. –
@ R.MartinhoFernandes: Ya một số tình huống. Nhưng s2 và s3 phải được khởi tạo một cách nào đó. Làm thế nào là nó được thực hiện mà không cần gọi ctor sao chép? –