Nice attempt 
I’d just suggest some alternative solution that doesn’t already instantiate an object that may well become redundant soon after.
How about something like this
const uint8_t addresses[] = { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f };
LiquidCrystal_I2C *lcd;
void setup() {
int i;
Wire.begin();
for(i = 0; i < sizeof(addresses); i++) {
Wire.beginTransmission(addresses[i]);
if (Wire.endTransmission() == 0) {
lcd = new LiquidCrystal_I2C(addresses[i], numLcdCols, numLcdRows);
lcd->init(); // initialise the newly found lcd
lcd->backlight();
lcd->clear();
lcd->print("Hello World!");
break;
}
}
if (i >= sizeof(addresses)) {
Log.error("No display found");
}
}