Tôi có một số lớp Foo và Logger:Làm thế nào để tạo một mảng với thành viên tham chiếu trong C++?
class Logger{/* something goes here */};
class Foo{
Foo(Logger& logger);
Logger& logger;
}
Foo::Foo(Logger& logger) : logger(logger)
{}
Bây giờ tôi muốn tạo một mảng các đối tượng của lớp Foo, nơi tất cả các tài liệu tham khảo Foo::logger
phải trỏ đến cùng một đối tượng Logger
. Tôi cố gắng một cái gì đó tương tự (Tôi cần cả hai ngăn xếp và phân bổ đống):
Logger log (/* parameters */);
Foo objects [3] (log); // On stack
Foo* pObjects = new Foo [3] (log); // On heap
Vấn đề là cả hai phiên bản thử để gọi constructor mặc định Foo()
mà không phải là hiện tại. Ngoài ra, tôi hiểu rằng không thể thay đổi biến được tham chiếu của tham chiếu. Vì vậy, một cuộc gọi tạm thời đến constructor mặc định và sau đó initalisation trong một vòng lặp cũng không giúp đỡ.
Vì vậy: Cách phù hợp để làm điều đó là gì? Tôi có cần sử dụng con trỏ đến đối tượng Logger
không?
Để chắc chắn rằng tôi hiểu bạn: Bạn có nghĩa là một số thành viên tĩnh cho tất cả các đối tượng? Làm thế nào để khởi tạo nó sau đó? Hoặc một đối tượng riêng biệt/biến toàn cục/...? –
Anh ấy có nghĩa là một lớp singleton có thể truy cập từ mọi nơi trong mã của bạn. Đây là cách phổ biến cho logger. – giorashc